gpt4 book ai didi

java - 在目录中搜索特定模式的文件

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

Java中,如何递归地检查文件夹中是否有特定模式的文件?我在网上的很多帖子中看到了以下代码:

public static void findFiles() throws IOException {
File dir = new File(".");
FileFilter fileFilter = new WildcardFileFilter("*.txt");
File[] files = dir.listFiles(fileFilter);
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
}

在我的应用程序中,我基本上需要检查用户主目录中与 *.txt 匹配的文件。

由于每个用户的路径都不同,我如何使用此代码来搜索与文件系统上任何位置的模式匹配的文件?

最佳答案

您实际上可以简单地使用:

final File dir = new File(System.getProperty("user.home"));

这会将dir 设置为您用户的home 目录。从那里,您只需列出所有 .txt 文件,而不是递归;)

<小时/>

但是,如果您仍然想递归地列出目录中的所有文件,可以使用以下方法:

public static List<File> walk(final File root, final String extension) {
final File[] list = root.listFiles();
if (list == null) {
return Collections.EMPTY_LIST;
}

final List<File> res = new ArrayList<>();
for (final File f : list) {
if (f.isDirectory()) {
res.addAll(walk(f, extension));
} else {
if (f.getName().endsWith(extension)) {
res.add(f);
}
}
}

return res;
}

您可以按如下方式使用它:

public static void main(final String[] args) {
for (final File file : walk(new File("/home/user3751169"), ".txt")) {
System.out.println(file.getAbsolutePath());
}
}
<小时/>

另一方面,如果您只想查找当前用户的 home 目录中的文件,则应删除对 walk() 的递归调用:

public static List<File> walk(final File root, final String extension) {
final File[] list = root.listFiles();
if (list == null) {
return Collections.EMPTY_LIST;
}

final List<File> res = new ArrayList<>();
for (final File f : list) {
if (f.isFile() && f.getName().endsWith(extension)) {
res.add(f);
}
}

return res;
}

关于java - 在目录中搜索特定模式的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25172495/

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