为什么 'Path.startsWith' 行为不同于 'String.startsWith' 操作 - 即使对于 'Path.getFilename'
Why is 'Path.startsWith' behaviour different from a 'String.startsWith' operation - even for 'Path.getFilename'
我正在使用 Java 版本 1.8。0_31。
我正在尝试使用 FileVisitor 接口递归访问目录树。
程序应打印 C:/books
中文件名以 "Ver" 开头的所有文件的名称。
目录 C:/books
有两个以 "Ver"、Version.yxy
和 Version1.txt
开头的文件。
我尝试使用 file.getFileName().startsWith("Ver")
但这个 returns 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
Path.getFileName()
returns a Path
containing just the file name. Path.startsWith
检查路径是否以相同的路径组件序列开始——逻辑操作,而不是文本操作。 startsWith
Javadoc 是明确的:
On UNIX for example, the path "foo/bar" starts with "foo" and "foo/bar". It does not start with "f" or "fo".
如果您只想检查文本的开头方式,请先通过调用 toString()
转换为字符串:Path.getFileName().toString().startsWith("Ver")
.
我正在使用 Java 版本 1.8。0_31。
我正在尝试使用 FileVisitor 接口递归访问目录树。
程序应打印 C:/books
中文件名以 "Ver" 开头的所有文件的名称。
目录 C:/books
有两个以 "Ver"、Version.yxy
和 Version1.txt
开头的文件。
我尝试使用 file.getFileName().startsWith("Ver")
但这个 returns 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
Path.getFileName()
returns a Path
containing just the file name. Path.startsWith
检查路径是否以相同的路径组件序列开始——逻辑操作,而不是文本操作。 startsWith
Javadoc 是明确的:
On UNIX for example, the path "foo/bar" starts with "foo" and "foo/bar". It does not start with "f" or "fo".
如果您只想检查文本的开头方式,请先通过调用 toString()
转换为字符串:Path.getFileName().toString().startsWith("Ver")
.