如何遍历文件夹中的所有文件(如果文件的名称未知)?

时间:2013-10-04 20:51:29

标签: java loops

有一个文件夹:C:\\Users\..myfolder

它包含.pdf个文件(或任何其他文件,例如.csv)。我无法更改这些文件的名称,我不知道这些文件的数量。我需要逐个循环所有文件。 我怎样才能做到这一点?

(如果我知道名字,我知道如何做到这一点)

4 个答案:

答案 0 :(得分:3)

只需使用File.listFiles

即可
final File file = new File("whatever");
for(final File child : file.listFiles()) {
    //do stuff
}

您也可以使用FileNameExtensionFilter过滤文件

final FileNameExtensionFilter extensionFilter = new FileNameExtensionFilter("N/A", "pdf", "csv"//, whatever other extensions you want);
final File file = new File("whatever");
for (final File child : file.listFiles()) {
    if(extensionFilter.accept(child)) {
        //do stuff
    }
}

恼人地FileNameExtensionFilter来自javax.swing包,因此不能直接在listFiles() api中使用,它比自己实现文件扩展名过滤器更方便。

答案 1 :(得分:3)

File.listFiles()为您提供文件夹中的文件数组。然后,您可以拆分文件名以获取扩展名,并检查它是否为.pdf

File[] files = new File("C:\\Users\..myfolder").listFiles();
for (File file : files) {
    if (!file.isFile()) continue;

    String[] bits = file.getName().split(".");
    if (bits.length > 0 && bits[bits.length - 1].equalsIgnoreCase("pdf")) {
        // Do stuff with the file
    }
}

答案 2 :(得分:3)

所以你可以有更多选择,尝试 Java 7 NIO 这样做

public static void main(String[] args) throws Exception {
    try (DirectoryStream<Path> files = Files.newDirectoryStream(Paths.get("/"))) {
        for (Path path : files) {
            System.out.println(path.toString());
        }
    }
}

您还可以DirectoryStream.Filter实施

的形式为路径提供过滤器
public static void main(String[] args) throws Exception {
    try (DirectoryStream<Path> files = Files.newDirectoryStream(Paths.get("/"),
        new DirectoryStream.Filter<Path>() {
            @Override
            public boolean accept(Path entry) throws IOException {
                return true; // or whatever you want
            }
        })
    ) {

        for (Path path : files) {
            System.out.println(path.toString());
        }
    }
}

显然,您可以将匿名类提取到实际的类声明中。

请注意,此解决方案无法像null解决方案那样返回listFiles()

对于递归解决方案,请查看FileVisitor界面。对于路径匹配,请使用PathMatcher界面以及FileSystemsFileSystem。 Stackoverflow周围有一些例子。

答案 3 :(得分:2)

您可以使用Java.io.File.listFiles()方法获取文件夹中所有文件和文件夹的列表。