我正在用Java编写一个应用程序,该应用程序显示文件名中的第一个单词与用户定义的字符串匹配的文件列表,然后根据某些首选项删除或重新排列它们。我目前正处于寻找找到我的文件的好方法的阶段。使用本Java教程,我最终得到了这样的结果:
Path source = Paths.get(sourceText.getText());
Path dest = Paths.get(destText.getText());
System.out.println("Source:" + source.toString());
System.out.println("P/N: " + partNoText.getText());
String matchString = "glob:**" + partNoText.getText() + "*";
System.out.println("Matching: " + matchString);
fileFinder = new FileFinder(matchString);
try {
Files.walkFileTree(source, fileFinder);
} catch (IOException e1) {
e1.printStackTrace();
}
for (Path path : fileFinder.getResult()) {
System.out.println("Moving: " + path.getFileName());
Path target = Paths.get(dest.toString() + "\\" + path.getFileName());
try {
Files.move(path, target, REPLACE_EXISTING);
} catch (IOException e1) {
e1.printStackTrace();
}
}其中,FileFinder扩展了SimpleFileVisitor并具有以下visitFile方法:
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println(file.toString());
System.out.println(fileMatcher.matches(file));
if (fileMatcher.matches(file)) {
result.add(file);
return FileVisitResult.CONTINUE;
}
return FileVisitResult.CONTINUE;
}我的问题是,在任何文件名包含部件no的情况下,glob都会获取文件。以任何方式。因此,如果我的文件名为"12345 RevA真大第2部分:电动Bugaloo“,那么如果用户输入"1”或"123“或"Bugaloo”,则字符串将匹配。理想情况下,只有当用户输入"12345“时,它才会匹配。
我尝试将我的matchString切换到"regex: .*" + partNoText + "\\b",它在我从另一个Java教程修改的regex测试工具中工作。我做错了什么?PathMatcher的工作方式与普通的Matcher不同吗?
任何包含“文本”字的变量,比如sourceText和partNoText,都是JTextFields。这是代码中唯一不清楚我从中删掉了什么的部分。
发布于 2017-10-26 08:49:35
我觉得你走的路很复杂。当你不去寻找事件的时候,你为什么一开始就用帕特·马克。
遍历文件树和每个目录迭代目录流以匹配您的glob要容易得多。
https://stackoverflow.com/questions/40351842
复制相似问题