我使用的是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;
}
}
上述代码的输出是:
false Version.txt
false Version1.txt
答案 0 :(得分:6)
Path.getFileName()
返回仅包含文件名的Path
。 Path.startsWith
检查路径是否以相同的路径组件序列开始 - 逻辑操作,而不是文本操作。 startsWith
Javadoc是明确的:
在UNIX上,例如,路径“foo / bar”以“foo”和“foo / bar”开头。它不以“f”或“fo”开头。
如果您只是想检查文本的开头,请先调用toString()
Path.getFileName().toString().startsWith("Ver")
来转换为字符串。