# Java Notes

# Example - Recursive List

Here is an example of listing files and directories recursively.

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
    // File   : io/file/RecusiveList.java
    // Purpose: Recursively list directories and files.
    // Author : Fred Swartz 1997-08-06 (Bangkok, Thailand), 2000-10-31 (Rota, Spain)
    //                      2006-09-25 (Rodenbach, Deutschland)

    import java.util.*;
    import java.io.*;

    public class RecursiveList {
        static final int      MAX_DEPTH  = 20;  // Max 20 levels (directory nesting)
        static final String   INDENT_STR = "   ";                 // Single indent.
        static final String[] INDENTS    = new String[MAX_DEPTH]; // Indent array.

        //===================================================================== main
        public static void main(String[] args) {
            //... Initialize array of indentations.
            INDENTS[0] = INDENT_STR;
            for (int i = 1; i < MAX_DEPTH; i++) {
               INDENTS[i] = INDENTS[i-1] + INDENT_STR;
            }

            System.out.print("Enter a directory name to list recursively:");
            Scanner in = new Scanner(System.in);
            File root = new File(in.nextLine());
            if (root != null && root.isDirectory()) {
                listRecursively(root, 0);
            } else {
                System.out.println("Not a directory: " + root);
            }
        }

        //========================================================== listRecursively
        public static void listRecursively(File fdir, int depth) {
            System.out.println(INDENTS[depth] + fdir.getName());  // Print name.

            if (fdir.isDirectory() && depth < MAX_DEPTH) {
                for (File f : fdir.listFiles()) {  // Go over each file/subdirectory.
                    listRecursively(f, depth+1);
                }
            }
        }
    }