【发布时间】:2016-09-03 05:26:23
【问题描述】:
我需要使用以下选项/参数在 java 中开发文件扫描器:
- 一个目录
- 一个或多个模式,例如 *.xml、*.txt、*test.csv
- 递归扫描切换
我认为最好的方法是这样的:
public class FileScanningTest {
public static void main(String[] args) throws IOException {
String directory = "C:\\tmp\\scanning\\";
String glob = "**/*.xml";
Boolean rekursiv = false;
final PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher("glob:"+glob);
Files.walkFileTree(Paths.get(directory), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException {
if (pathMatcher.matches(path)) {
System.out.println(path);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
});
}
}
我不明白为什么我必须在我的实际模式前面加上“**/”。这也使扫描递归。如果我删除 **/,应用程序将找不到任何东西。
https://docs.oracle.com/javase/tutorial/essential/io/fileOps.html#glob 告诉 ** 意味着递归,但是如果我删除它为什么它不起作用?
有人可以给我一个提示吗?
谢谢大家,周末愉快
【问题讨论】: