import java.io.*; import java.util.*; public class JWalker { private int j = -1; private int numOfFiles = 0; private int numOfDirs = 0; private int numOfReadErrors = 0; private final void draw(String fileName, int rank, boolean isLastInDir) { for (int i = 0; i < rank; i++) System.out.print("| "); System.out.print(isLastInDir ? "`-- " + fileName + "\n" : "|-- " + fileName + "\n"); } final void reset() { numOfFiles = 0; numOfDirs = 0; numOfReadErrors = 0; j = -1; } final void printStats() { System.out.println("\ndirectories: " + numOfDirs + ", files: " + numOfFiles + ", read errors: " + numOfReadErrors); } private final void scan(String path) { File dir = new File(path); File[] dirContents = dir.listFiles(); Arrays.sort(dirContents); j++; for (File x : dirContents) { if (x.canRead()) { draw(x.getName(), j, x == dirContents[dirContents.length - 1]); if (x.isDirectory()) { numOfDirs++; scan(x.getAbsolutePath()); } else numOfFiles++; } else { numOfReadErrors++; draw(x.getName() + " [error reading]", j, x == dirContents[dirContents.length - 1]); } } j--; } public static void main(String[] args) { JWalker jw = new JWalker(); if(args.length==0) { jw.scan("."); jw.printStats(); } else { for(int i=0;i