如何以java打印所有目录和文件以及所有子目录和文件

如何以java打印所有目录和文件以及所有子目录和文件,java,loops,iteration,Java,Loops,Iteration,我写了下面的代码 我想改进我的代码中的所有子树,只针对2层,我想将我的代码更改为所有层的迭代代码 for(int p=0;p<f3.length;p++){ if(f3[p].isDirectory()){ System.out.println(f3[p]+"*****DIRECTORY*****"); File[] fsub=f3[p].listFiles();

我写了下面的代码 我想改进我的代码中的所有子树,只针对2层,我想将我的代码更改为所有层的迭代代码

    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");
    }
for(int p=0;p试试这个:

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();
    }
}
公共类测试{
公共静态void main(字符串[]args)引发IOException{
File[]路径=File.listRoots();
for(int i=0;i

}

您可以使用递归方法。下面建议的要点是,我们在遍历目录树时不断调用
printLevel
。当我们碰到一个文件时,递归停止,这意味着目录树中该点下不再有其他文件

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);
    }
}

可以递归调用方法,也可以使用
文件。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");
    }
});
Path p=Path.get(startDir);
walkFileTree(p,新的SimpleFileVisitor(){
公共无效访问文件(路径文件、基本文件属性属性属性){
System.out.println(Files.isDirectory(file)-“file”:“DIRECTORY”);
}
});

你签出答案了吗?如果我是你,我会尝试递归的方法。它的可能重复只在当前目录中起作用,而不是像OP所问的那样在整个文件系统中起作用:-/在整个文件系统中起作用。