gpt4 book ai didi

java - 在目录中查找具有两个关键字之一的文件

转载 作者:行者123 更新时间:2023-12-02 02:43:02 25 4
gpt4 key购买 nike

我的 Linux 服务器有一个目录,其中包含许多其他子目录,其中包含以关键字命名的文件。例如:

Dir1:
-Dir1.1:
-file-keyword11-keyword7-keyword9.txt
-file-keyword2-keyword7-keyword97.txt
-Dir1.2:
-file-keyword4-keyword6-keyword9.txt
-file-keyword2-keyword8-keyword3.txt
Dir2:
-Dir2.1:
-file-keyword5-keyword42-keyword2.txt
-file-keyword8-keyword11-keyword9.txt

我需要创建一个方法,该方法返回包含两个关键字之一的所有文件的列表。例如:

findFiles("keyword11", "keyword42");

应返回上一个示例的以下文件:

-file-keyword11-keyword7-keyword9.txt
-file-keyword5-keyword42-keyword2.txt
-file-keyword8-keyword11-keyword9.txt

我正在考虑创建一个递归方法来测试每个文件的名称是否包含两个关键字之一。但我担心性能,因为目录有数千个文件和子目录。而且每天都会创建越来越多的文件。

我想知道什么是正确的方法。我应该使用 file.getName().contains() 方法吗?我应该使用正则表达式吗?或者我应该使用像 grep 这样的 Linux 命令?

最佳答案

你可以使用FileVisitor,非常方便。

示例如下:

public class FileVisitorTest {

@Test
public void test() throws Exception {
String path = "D:\\downloads\\";
findFiles(path,"apache", "Test");
}

public void findFiles(String path, String... keyWords) {
try {
Files.walkFileTree(Paths.get(path), new FileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes fileAttributes) {
return FileVisitResult.CONTINUE;
}

public FileVisitResult visitFile(Path path, BasicFileAttributes fileAttributes) {
for (String keyWord : keyWords) {
if (path.getFileName() != null && path.getFileName().toFile().getName().contains(keyWord))
System.out.println("File name:" + path.getFileName());
}

return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}

如果您想对目录执行某些操作,请在访问目录之前和之后使用 preVisitDirectorypostVisitDirectory 方法执行某些操作。

关于java - 在目录中查找具有两个关键字之一的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45109817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com