Java循环遍历包含子文件夹的文件夹中具有相同名称的文件



我正在写一些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等等。它还可以让你像添加、删除、从一个列表中减去另一个列表一样按摩你的列表。

相关内容

  • 没有找到相关文章

最新更新