我正在写一些Java代码,在一个有很多子文件夹的文件夹中循环浏览同名文件,并对每个文件执行一些逻辑:
parentFolder/
subfolder1/file.txt
subfolder2/file.txt
subfolder3/file.txt
... ...
subfolderx/file.txt
上面是它的结构。
我该怎么做?
如果您使用Java 7,您可以尝试在Path API中实现的访问者模式:Files.walkFileTree(...)
使用它最简单的方法是传递SimpleFileVisitor
的一个(匿名)子类,并在访问文件时执行任何您想要的操作。例如,
Files.walkFileTree(parentPath, new SimpleFileVisitor() {
@Override FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
// you can do whatever you want with "file" here.
System.out.println("The file is: " + file);
return FileVisitResult.CONTINUE;
}
});
String parentFolderPath = "parentFolder";
String fileName = "file.txt";
File parent = new File(parentFolderPath);
for (File subFolder : parent.listFiles()) {
if (subFolder.isDirectory()) {
File f = new File(subFolder, fileName);
if (f.exists()) {
// your code here
}
}
}
看看Apache Commons中的FileUtils类。
他们有FileUtilsiterateFiles(File directory,IOFileFilter fileFilter,IOFileFilter-dirFilter)方法,您可以在其中指定文件筛选器。
我只想抛出另一种方法来实现这一点。此文件搜索和处理软件:http://www.softpedia.com/get/File-managers/JFileProcessor.shtmlhttps://github.com/stant/jfileprocessor
将允许您搜索带有glob或regex的文件,在子文件夹中搜索到X或所有深度,按名称、大小、日期。您可以保存到列表窗口或文件中。然后,您可以运行groovy(想想java)脚本,对文件列表执行任何您想要的操作;zip或tar,修改列表字符串,如sed、delete、move、copy files、grep或ls-l等等。它还可以让你像添加、删除、从一个列表中减去另一个列表一样按摩你的列表。