如何在Java中迭代某个目录的文件? [复制]

Posted

技术标签:

【中文标题】如何在Java中迭代某个目录的文件? [复制]【英文标题】:How to iterate over the files of a certain directory, in Java? [duplicate] 【发布时间】:2011-06-22 11:39:30 【问题描述】:

可能重复:Best way to iterate through a directory in java?

我想使用 Java 处理某个目录中的每个文件。

最简单(也是最常见)的方法是什么?

【问题讨论】:

重复:***.com/questions/3154488/… 这是重复的,但不是关于深度遍历的问题(“包括所有子目录中的文件)。请参阅How do I iterate through the files in a directory in Java? 【参考方案1】:

如果你有myDirectoryPath中的目录名,

import java.io.File;
...
  File dir = new File(myDirectoryPath);
  File[] directoryListing = dir.listFiles();
  if (directoryListing != null) 
    for (File child : directoryListing) 
      // Do something with child
    
   else 
    // Handle the case where dir is not really a directory.
    // Checking dir.isDirectory() above would not be sufficient
    // to avoid race conditions with another process that deletes
    // directories.
  

【讨论】:

Javado 在 listFiles() 中说:“表示目录本身和目录父目录的路径名不包含在结果中。” 仅供参考,如果你想要当前文件夹,你可以使用`new File(".");'【参考方案2】:

我想有很多方法可以制作您想要的东西。这是我使用的一种方式。使用commons.io 库,您可以遍历目录中的文件。您必须使用FileUtils.iterateFiles 方法,并且您可以处理每个文件。

您可以在这里找到信息:http://commons.apache.org/proper/commons-io/download_io.cgi

这是一个例子:

Iterator it = FileUtils.iterateFiles(new File("C:/"), null, false);
        while(it.hasNext())
            System.out.println(((File) it.next()).getName());
        

如果您想过滤,您可以更改null 并添加扩展列表。示例:".xml",".java"

【讨论】:

@john-assymptoth,如果库包含大量文件,则如果没有这个库和只有 java 实现的 util,您将在 ***Error 中驱动。 (java.sun.com/javase/6/docs/api/java/lang/…) commons.io 的最新版本 (2.6) 中,您的调用看起来像 FileUtils.iterateFiles(new File("C:/"), null, null)(忽略子目录)或例如 FileUtils.iterateFiles(new File("C:/"), new SuffixFileFilter(".java"), null) 以对文件扩展名应用过滤器。【参考方案3】:

这是一个列出我桌面上所有文件的示例。您应该将路径变量更改为您的路径。

不要使用 System.out.println 打印文件名,您应该放置自己的代码来对文件进行操作。

public static void main(String[] args) 
    File path = new File("c:/documents and settings/Zachary/desktop");

    File [] files = path.listFiles();
    for (int i = 0; i < files.length; i++)
        if (files[i].isFile()) //this line weeds out other directories/folders
            System.out.println(files[i]);
        
    

【讨论】:

【参考方案4】:

使用java.io.File.listFiles 或者如果您想在迭代之前过滤列表(或任何更复杂的用例),请使用 apache-commons FileUtils。 FileUtils.listFiles

【讨论】:

listFiles 被覆盖以采用文件过滤器或文件名过滤器,因此如果您只想过滤,则无需使用 apache-commons。虽然它是一个很好的图书馆。

以上是关于如何在Java中迭代某个目录的文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何迭代Java中的枚举字段? [复制]

如何从目录中获取特定数量的文件? [复制]

linux文件夹内文件复制,如何排除某个文件

如何将文件保存到在 REST URL 请求中下载的某个文件夹? [复制]

公司共享文件夹如何设置某个文件夹只读属性,不可更改复制删除等操作?

如何在不复制的情况下从 N 维容器中获取可迭代范围?