Recursive Structures Lab

Introduction

The goal of this lab is to practice using recursion to interact with recursively structured data. One example of a recursively structured collection is the file system of a computer. A file system is made up of directories, each of which may contain additional directories, and so forth.

Please watch this 6-minute video by Gayle Laakmann McDowell :

Source Files

The following files are provided:

  1. DirectorySearcher.java – This (unfinished) class is responsible for recursively traversing a directory tree starting from a designated directory.
  2. DirectoryDriver.java – This is a driver class for executing the methods provided by DirectorySearcher. As currently written, the main method uses a DirectorySearcher to list the contents of the current directory.

Instructions

  1. Download and test the two files above. Make sure you understand how the existing code works.
    • if you run it as it is when you first download it, you should see something like:
      bin	(Directory)
      .classpath
      .settings	(Directory)
      .project
      src	(Directory)
      
  2. Complete the listDirectories (plural) method of the DirectorySearcher class. Test your method by modifying the driver so that it calls this method instead of listDirectory (singular).
    • Your solution should print a "/" after each directory name and indent the files under each directory. For example,
      1. if the starting path is ".", the output might look like this:
        ./
            bin/
                DirectorySearcher.class
                DirectoryDriver.class
            .classpath
            .settings/
                org.eclipse.jdt.core.prefs
                org.eclipse.core.resources.prefs
            .project
            src/
                DirectorySearcher.java
                DirectoryDriver.java
        
      2. if the starting path is "../PA2", the output might look like this:
        PA2/
            bin/
                io/
                    FileProcessor.class
                    CSVFileProcessor.class
                    FileIdentifier.class
                    CSVRepresentable.class
                testing/
                    VIPAccountTest.class
                    FieldIdentifierTest.class
                    AccountTest.class
                    CSVFileProcessorTest.class
                .gitignore
                membership/
                    VIPAccount.class
                    Account.class
            .classpath
            .project
            src/
                io/
                    FileIdentifier.java
                    CSVFileProcessor.java
                    CSVRepresentable.java
                    FileProcessor.java
                testing/
                    FieldIdentifierTest.java
                    AccountTest.java
                    CSVFileProcessorTest.java
                    VIPAccountTest.java
                membership/
                    VIPAccount.java
                    Account.java
        
  3. Complete the searchDirectories method of the DirectorySearcher class. Test your method by modifying the driver; search for different patterns to make sure it works.
    • Your solution should print the path to each file that is found. (Just print the File object itself, rather than calling getName.) For example, if the search string is "nt", the output might look like this:
      ../PA2/bin/io/FileIdentifier.class
      ../PA2/bin/io/CSVRepresentable.class
      ../PA2/bin/testing/VIPAccountTest.class
      ../PA2/bin/testing/FieldIdentifierTest.class
      ../PA2/bin/testing/AccountTest.class
      ../PA2/bin/membership/VIPAccount.class
      ../PA2/bin/membership/Account.class
      ../PA2/src/io/FileIdentifier.java
      ../PA2/src/io/CSVRepresentable.java
      ../PA2/src/testing/FieldIdentifierTest.java
      ../PA2/src/testing/AccountTest.java
      ../PA2/src/testing/VIPAccountTest.java
      ../PA2/src/membership/VIPAccount.java
      ../PA2/src/membership/Account.java
      
    • while if you searched for empty string "", the output might be:
      ../PA2
      ../PA2/bin
      ../PA2/bin/io
      ../PA2/bin/io/FileProcessor.class
      ../PA2/bin/io/CSVFileProcessor.class
      ../PA2/bin/io/FileIdentifier.class
      ../PA2/bin/io/CSVRepresentable.class
      ../PA2/bin/testing
      ../PA2/bin/testing/VIPAccountTest.class
      ../PA2/bin/testing/FieldIdentifierTest.class
      ../PA2/bin/testing/AccountTest.class
      ../PA2/bin/testing/CSVFileProcessorTest.class
      ../PA2/bin/.gitignore
      ../PA2/bin/membership
      ../PA2/bin/membership/VIPAccount.class
      ../PA2/bin/membership/Account.class
      ../PA2/.classpath
      ../PA2/.project
      ../PA2/src
      ../PA2/src/io
      ../PA2/src/io/FileIdentifier.java
      ../PA2/src/io/CSVFileProcessor.java
      ../PA2/src/io/CSVRepresentable.java
      ../PA2/src/io/FileProcessor.java
      ../PA2/src/testing
      ../PA2/src/testing/FieldIdentifierTest.java
      ../PA2/src/testing/AccountTest.java
      ../PA2/src/testing/CSVFileProcessorTest.java
      ../PA2/src/testing/VIPAccountTest.java
      ../PA2/src/membership
      ../PA2/src/membership/VIPAccount.java
      ../PA2/src/membership/Account.java
      
  4. Submit your completed DirectorySearcher.java file via GradeScope.