文件夹中的Java搜索文件

时间:2018-07-10 21:08:26

标签: java search

我正在编写一个实用程序,它将搜索文件夹并列出文件。 主要目的是查找所有具有相同名称但具有diff扩展名的文件。例如:在给定的文件夹中,我们有a.log,a.jpg,a.clone,b.log,c.log,d.log,d.clone的文件,我的输出应仅为c.log和d .log。我的主要目的是查找包含.clone扩展名的文件,并且在这种情况下不打印它们,而文件c和d不具有.clone扩展名,它们应该是输出。 我无法列出名称相同但扩展名不同的文件。

有关如何执行此操作的任何建议。

关于, 维拉斯

3 个答案:

答案 0 :(得分:0)

当您列出某个文件夹中的所有文件时,例如:File[] files = file.listFiles(),您可以循环浏览它们并检查文件名。在这里,file实际上是您要在其中搜索文件的文件夹。

    for(int i=0; i<files.length; i++)
    {
       if(files[i].getName().startsWith("filename."))
       { 
          do what you want 
       }

    }

因此,以"filename."开头的所有文件都将符合条件,无论.即扩展名之后是什么。

答案 1 :(得分:0)

从Java 7开始,您可以使用walkTreeFile()来控制要深入到树上的深度,以及如何处理找到的每个文件(使用适当的FileVisitor)。

使用Executor,您可以处理文件而无需等待搜索结束。

答案 2 :(得分:0)

从Java 8开始,您不应像以前建议的那样使用FileVisitorwalkTreeFile()File类,而应使用接口Path和方法{{1} }:

Files.list(Path dir)

如果要在文件树中进行更深入的搜索,请使用 public static void main(String[] args) throws IOException { Path folderWithTheFiles = Paths.get("/my/folder/with/the/files/"); //list the folder and add files names with a .clone extension in a Set Set<String> cloneFilesNames = Files.list(folderWithTheFiles) .filter(p->p.toString().endsWith(".clone")) .map(p -> p.getFileName().toString().split("\\.")[0]).collect(Collectors.toSet()); //list the folder and filter it with the Set created before Files.list(folderWithTheFiles) .filter(p->!cloneFilesNames.contains(p.getFileName().toString().split("\\.")[0])) .map(Path::getFileName).forEach(System.out::println); } 而不是Files.walk(Path dir)