我正在编写一些Java代码,在具有大量子文件夹的文件夹中循环使用相同名称的文件,并对每个文件执行一些逻辑操作:
parentFolder/
subfolder1/file.txt
subfolder2/file.txt
subfolder3/file.txt
... ...
subfolderx/file.txt
以上是它的外观结构。
我该怎么做?
答案 0 :(得分:3)
如果您使用的是Java 7,则可以尝试路径API中实现的visitor pattern: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;
}
});
答案 1 :(得分:1)
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
}
}
}
答案 2 :(得分:0)
在Apache Commons中查看FileUtils课程。
他们有FileUtilsiterateFiles(File directory,IOFileFilter fileFilter,IOFileFilter dirFilter)方法,您可以在其中指定文件过滤器。
答案 3 :(得分:0)
我只想抛弃另一种方法来做到这一点。这个文件搜索和处理软件: http://www.softpedia.com/get/File-managers/JFileProcessor.shtml https://github.com/stant/jfileprocessor
将允许您使用glob或正则表达式搜索文件,在子文件夹中搜索X或所有深度,按名称,大小,日期。您可以保存到列表窗口或文件。 然后你可以运行一个groovy(想想java)脚本来做任何你想要的文件列表; zip或tar它们,修改列表字符串,如sed,delete,move,copy files,grep或ls -l它们等等。 它还可以让您按下列表,例如添加,删除,从另一个列表中减去一个列表。