有一个文件夹:C:\\Users\..myfolder
它包含.pdf
文件(或任何其他文件,例如 .csv)。我无法更改这些文件的名称,也不知道这些文件的数量。我需要一个一个循环所有文件。我怎样才能做到这一点?
(如果我知道名字,我知道该怎么做)
只需使用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中使用,还是比自己实现一个文件扩展过滤器方便多了。
所以你可以有更多的选择,试试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
接口与FileSystems
和一起使用FileSystem
。Stackoverflow 周围有一些例子。
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
}
}
您可以使用Java.io.File.listFiles()
方法获取文件夹内所有文件和文件夹的列表。