【发布时间】:2011-06-22 11:39:30
【问题描述】:
【问题讨论】:
-
这是重复的,但不是关于深度遍历的问题(“包括所有子目录中的文件)。请参阅How do I iterate through the files in a directory in Java?
【问题讨论】:
如果你有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.
}
【讨论】:
我想有很多方法可以制作您想要的东西。这是我使用的一种方式。使用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"}
【讨论】:
StackOverflowError 中驱动。 (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) 以对文件扩展名应用过滤器。
这是一个列出我桌面上所有文件的示例。您应该将路径变量更改为您的路径。
不要使用 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]);
}
}
}
【讨论】:
使用java.io.File.listFiles
或者
如果您想在迭代之前过滤列表(或任何更复杂的用例),请使用 apache-commons FileUtils。 FileUtils.listFiles
【讨论】:
listFiles 被覆盖以采用文件过滤器或文件名过滤器,因此如果您只想过滤,则无需使用 apache-commons。虽然它是一个很好的图书馆。