0

I wrote the below code I wanna improve to all sub trees at my code just for 2 layer I wanna change my code to iteration code for all layers.

    for(int p=0;p<f3.length;p++){

            if(f3[p].isDirectory()){
                System.out.println(f3[p]+"*****DIRECTORY*****");
                File[] fsub=f3[p].listFiles();
                for(int i=0;i<fsub.length;i++){
                    if(fsub[i].isDirectory()){
                    System.out.println(fsub[i]+"  DIRECTOY");}
                    else System.out.println(fsub[i]+"  FILE");
                }

                    }
            else System.out.println(f3[p]+"--FILE");
    }
devd
  • 370
  • 10
  • 28
  • Have you checked [this](https://stackoverflow.com/a/3154643/133203) answer out? – Federico klez Culloca Aug 22 '18 at 09:56
  • 1
    If i were you, I would have tried something recursive. – Julien Aug 22 '18 at 09:57
  • 3
    Possible duplicate of [Recursively list files in Java](https://stackoverflow.com/questions/2056221/recursively-list-files-in-java) – NaN Aug 22 '18 at 09:57
  • 1
    Possible duplicate of [How do I iterate through the files in a directory in Java?](https://stackoverflow.com/questions/3154488/how-do-i-iterate-through-the-files-in-a-directory-in-java) – fantaghirocco Aug 22 '18 at 10:01

3 Answers3

1

You could go with a recursive approach. The gist of the suggestion below is that we keep calling printLevel while traversing down the directory tree. The recursions stop when we hit a file, which means there are no further files below that point in the directory tree.

public void printLevel(File file) {
    if (!file.isDirectory()) {
        System.out.println(file.getName() + "--FILE");
        return;
    }

    System.out.println(file.getName() + "*****DIRECTORY*****");
    File[] subs = file.listFiles();
    for (File sub : subs) {
        printLevel(sub);
    }
}
Tim Biegeleisen
  • 502,043
  • 27
  • 286
  • 360
0

Try this:

public class Test {
public static void main(String[] args) throws IOException {
    File[] paths = File.listRoots();
    for (int i = 0; i < paths.length; i++) {
            showfiles(paths[i]);
        }       
}

public static void showfiles(File dir) {
    try {
        File[] files = dir.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                System.out.println("Directory:" + file.getCanonicalPath());
                showfiles(file);
            } else {
                System.out.println("File:" + file.getCanonicalPath());
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

brijesh
  • 760
  • 6
  • 4
0

You either call your method recursively or use Files.walkFileTree:

Path p = Paths.get(startDir);
File.walkFileTree(p, new SimpleFileVisitor<Path>() {
    public void visitFile(Path file, BasicFileAttributes attrs) {
        System.out.println(Files.isDirectory(file) ? "FILE" : "DIRECTORY");
    }
});
daniu
  • 14,137
  • 4
  • 32
  • 53