java - 为什么 'Path.startsWith' 行为不同于 'String.startsWith' 操作 - 即使是 'Path.getFilename'

标签 java java.nio.file

我使用的是 Java 版本 1.8.0_31。

我正在尝试使用 FileVisitor 接口(interface)递归访问目录树。 该程序应打印 C:/books 中文件名以“Ver”开头的所有文件的名称。 C:/books 目录有两个以“Ver”开头的文件,Version.yxyVersion1.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

最佳答案

Path.getFileName()返回仅包含文件名的 PathPath.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 - 为什么 'Path.startsWith' 行为不同于 'String.startsWith' 操作 - 即使是 'Path.getFilename',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30157072/

相关文章:

java - JFreeChart 的堆叠折线渲染器?

java - 使用 Spring JPA 的单向多对多映射

java - java中的进程同步

java - 未找到 java.nio 的最新添加内容;使用java 1.7.0_9

java.nio.file: Path 接口(interface)实际实现在哪里?

Java 小服务程序 : How can I retrieve selected radio button values?

java - 如何加快加载/设置图 block 的速度 - OSMDROID

java - Files.getLastModifiedTime() 是否泄漏内存?

java - 尝试使用资源处理临时文件

java : How do you create a function that increments a variable that isn't accessible from outside the function?