在 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
匹配的文件。
由于每个用户的路径会有所不同,如何使用此代码在 filesystem 的任何位置搜索与模式匹配的文件?
答案 0 :(得分:2)
你实际上可以简单地使用:
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;
}