【问题标题】:Iterate over files in certain directory without loops in Java在Java中没有循环的情况下迭代特定目录中的文件
【发布时间】:2012-11-27 13:40:00
【问题描述】:

迭代特定文件夹中的文件但没有循环的最佳方法是什么?即,当所有文件都被检查一次时,for循环将结束。

我的示例代码(带循环):

        File dir = new File(svnClient.getDestinationPath().getAbsolutePath());
          for (File child : dir.listFiles())
          {
            report.report("File name: " + child.getName());
          }

【问题讨论】:

  • 没有循环?您的示例包含增强的 for 循环...
  • 为什么你想在没有任何循环的情况下这样做?你的问题不清楚...
  • 要迭代,你需要一个循环。你建议这样做有什么问题?
  • 听起来像是功课,答案是递归
  • 为什么不想使用循环?你可以用递归来做到这一点,但循环更容易阅读和理解......

标签: java file loops iteration


【解决方案1】:

递归:

public void myMethod(){
     File dir = ...;
     List<File> files = Arrays.asList(dir.listFiles());
     recurse(files.iterator());
}

private void recurse(Iterator<File> iterator){
     if (iterator.hasNext()){
          File file = iterator.next();
          report.report(file.getName());
          recurse(iterator);
     }
}

【讨论】:

    【解决方案2】:

    滥用listFiles(FileFilter filter)方法,把你的逻辑放在回调中,忽略返回值。

    File dir = ...
    dir.listFiles(new FileFilter() {
        boolean accept(File child) {
            report.report("File name: " + child.getName());
            return false;
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2017-03-25
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      相关资源
      最近更新 更多