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



我写了下面的代码 我想改进我的代码中的所有子树,只针对 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");
}

你可以使用递归方法。 下面建议的要点是,我们在向下遍历目录树时不断调用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);
}
}

您可以递归调用方法或使用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");
}
});

试试这个:

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

}

最新更新