pet*_*ust 19 java glob java-7 java.nio.file
我一直在尝试使用JDK7中的新globbing功能,从文档和示例开始
我可以得到像我这样"glob:*.dat"的人
Files.walkFileTree(startingDir, finder);
Run Code Online (Sandbox Code Playgroud)
例如,但我无法使"**"语法正常工作.我希望能够创建类似的东西:
matcher = FileSystems.getDefault().getPathMatcher("glob:" + "foo/**/bar/*.dat");
Run Code Online (Sandbox Code Playgroud)
并希望得到一个简单的例子.我使用的是Windows 7.
更新:@Oleg和@JBNizet清楚地表明"/"语法与操作系统无关.请注意,Javadocs建议也可以使用依赖于操作系统的语法(需要)
仍有问题:已采取@Nizet并编辑如下:
@Test
public void testStackoverflowGlobber() throws IOException {
final PathMatcher matcher =
FileSystems.getDefault().getPathMatcher("glob:*.cml");
Files.walkFileTree(Paths.get("d:/petermr-workspace/jumbo-converters/jumbo-converters-cli/src/test/resources"), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("try>> "+file);
if (matcher.matches(file)) {
System.out.println("MATCHES>>"+file);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
});
}
Run Code Online (Sandbox Code Playgroud)
这给出了如下输出:
try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cdx\r19.cdx
try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cdx\r19.cdxml
try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cdx\r19.cml
try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cdx\r19.ref.cdxml
try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cdx\r19.ref.cml
try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cif\aa2004.cml
Run Code Online (Sandbox Code Playgroud)
但没有匹配的证据
JB *_*zet 15
这是一个工作示例,显示以下任何后代目录中的所有zip文件d:/:
public static void main(String[] args) throws IOException {
final PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:d:/**/*.zip");
Files.walkFileTree(Paths.get("d:/"), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (matcher.matches(file)) {
System.out.println(file);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
});
}
Run Code Online (Sandbox Code Playgroud)
如您所见,使用正斜杠适用于Windows.
你需要用**开始你的全局
matcher = FileSystems.getDefault().getPathMatcher("glob:**/foo/**/bar/*.dat");
Run Code Online (Sandbox Code Playgroud)
否则,打电话
matcher.matches(file)
Run Code Online (Sandbox Code Playgroud)
尝试将文件的完整路径与以相对路径(/ foo /)开头的正则表达式匹配,而不是与绝对路径(d:/ petermr-workspace /.../ foo)匹配.
将**添加到glob只是告诉它忽略绝对路径的开头.
| 归档时间: |
|
| 查看次数: |
12395 次 |
| 最近记录: |