Nic*_*cks 3 java java.nio.file
我使用的是Java版本1.8.0_31.
我试图使用FileVisitor接口递归访问目录树.程序应该打印C:/books文件名以"Ver"开头的所有文件的名称.该目录C:/books有两个以"Ver"开头的文件,Version.yxy和Version1.txt.我尝试过使用file.getFileName().startsWith("Ver")但是返回false.
我错过了什么吗?这是我的代码:
public class FileVisitorTest {
public static void main(String[] args) {
RetriveVersionFiles vFiles = new RetriveVersionFiles();
try {
Files.walkFileTree(Paths.get("c:", "books"), vFiles);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class RetriveVersionFiles extends SimpleFileVisitor<Path> {
public FileVisitResult visitFile(Path file, BasicFileAttributes attr) {
System.out.println(file.getFileName().startsWith("Ver") + " "
+ file.getFileName());
if (file.getFileName().startsWith("Ver")) {
//not entering this if block
System.out.println(file);
}
return FileVisitResult.CONTINUE;
}
}
Run Code Online (Sandbox Code Playgroud)
上面代码的输出是:
false Version.txt
false Version1.txt
Run Code Online (Sandbox Code Playgroud)
Path.getFileName()返回一个Path只包含文件名的内容. Path.startsWith检查路径是否以相同的路径组件序列开始 - 逻辑操作,而不是文本操作.该startsWithJavadoc中是明确的:
例如,在UNIX上,路径"foo/bar"以"foo"和"foo/bar"开头.它不以"f"或"fo"开头.
如果你只是想检查文本的开头是什么,首先通过调用toString():转换为String Path.getFileName().toString().startsWith("Ver").
| 归档时间: |
|
| 查看次数: |
1548 次 |
| 最近记录: |