【问题标题】:How can I print all directory and files and all sub directory and file at java如何在java中打印所有目录和文件以及所有子目录和文件
【发布时间】:2018-08-22 09:54:10
【问题描述】:

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

【问题讨论】:

标签: java loops iteration


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你要么递归调用你的方法,要么使用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");
        }
    });
    

    【讨论】:

      【解决方案3】:

      试试这个:

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

      }

      【讨论】:

      • 它仅适用于当前目录,而不是 OP 要求的整个文件系统树:-/
      • 适用于整个文件系统。
      猜你喜欢
      • 2017-03-15
      • 2017-04-03
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      • 2013-12-31
      • 2011-03-01
      • 1970-01-01
      • 2016-11-07
      相关资源
      最近更新 更多