我正在编写一个实用程序,它将搜索文件夹并列出文件。 主要目的是查找所有具有相同名称但具有diff扩展名的文件。例如:在给定的文件夹中,我们有a.log,a.jpg,a.clone,b.log,c.log,d.log,d.clone的文件,我的输出应仅为c.log和d .log。我的主要目的是查找包含.clone扩展名的文件,并且在这种情况下不打印它们,而文件c和d不具有.clone扩展名,它们应该是输出。 我无法列出名称相同但扩展名不同的文件。
有关如何执行此操作的任何建议。
关于, 维拉斯
答案 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开始,您不应像以前建议的那样使用FileVisitor
,walkTreeFile()
和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)