Recursive methods are efficient for solving problems with recursive structures. The preceding examples can easily be solved without using recursion. This section presents a problem that is difficult to solve without using recursion. The problem is to find the size of a directory. The size of a directory is the sum of the sizes of all files in the directory. A directory d may contain subdirectories. Suppose a directory contains files f1, f2, ... , fm and subdirectories d1, d2, ... , dn, as shown in Figure below.
The size of the directory can be defined recursively as follows:
size(d) = size(f1) + size(f2) + ... + size(fm) + size(d1) + size(d2) + ... + size(dn)
The File class can be used to represent a file or a directory and obtain the properties for files and directories. Two methods in the File class are useful for this problem:
- The length() method returns the size of a file.
- The listFiles() method returns an array of File objects under a directory.
The code below gives a program that prompts the user to enter a directory or a file and displays its size.
If the file object represents a directory (line 20), each subitem (file or subdirectory) in the directory is recursively invoked to obtain its size (line 23). If the file object represents a file (line 26), the file size is obtained and added to the total size (line 27).
What happens if an incorrect or a nonexistent directory is entered? The program will detect that it is not a directory and invoke file.length() (line 27), which returns 0. Thus, in this case, the getSize method will return 0.
To avoid mistakes, it is a good practice to test all cases. For example, you should test the program for an input of file, an empty directory, a nonexistent directory, and a nonexistent file.
Top comments (0)