有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中带不同分隔符的统一路径

我有一条输入路径,没有统一的分隔符

例如:

  • path/to/file\example.txt

或者

  • \\path\to\file/example.txt

如何在Java中基于路径的第一部分统一分隔符


共 (2) 个答案

  1. # 1 楼答案

    一般来说,永远不要使用字符串替换来处理操作系统路径。Java对NIO Path类中的OS路径名有很好的支持

    只需将输入作为Path p = Path.of(input)传递即可生成path实例,而不管输入斜杠的组合如何。然后p.toString()应该生成等效的OS路径:

    String [] lines = {
       "path/to/file\\example.txt",
       "\\\\path\\to\\file/example.txt",
    };
    for (String input : lines) {
        Path p = Path.of(input);
        System.out.println(input+" => "+p.toString());
        System.out.println("    getNameCount()="+p.getNameCount());
        do {
            System.out.println("    getParent()="+p.getParent() +"   getName()="+p.getFileName());
        } 
        while( (p = p.getParent()) != null);
    }
    

    请注意,Windows将这两种类型的斜杠处理为Windows路径分隔符\,因此file\example.txt被视为文件夹file中名为example.txt的文件的路径,UNC路径前缀作为一个父路径组件\\SERVER\rootpath而不是\\SERVER链接在一起,然后rootpath

    path/to/file\example.txt => path\to\file\example.txt
        getNameCount()=4
        getParent()=path\to\file   getName()=example.txt
        getParent()=path\to   getName()=file
        getParent()=path   getName()=to
        getParent()=null   getName()=path
    \\path\to\file/example.txt => \\path\to\file\example.txt
        getNameCount()=2
        getParent()=\\path\to\file   getName()=example.txt
        getParent()=\\path\to\   getName()=file
        getParent()=null   getName()=null
    

    Linux将Windows路径分隔符\作为文件名的一部分处理,以便to/file\example.txt被视为文件夹to中名为file\example.txt的文件的路径,UNC路径名被视为包含多个\的一个名称:

    path/to/file\example.txt => path/to/file\example.txt
        getNameCount()=3
        getParent()=path/to   getName()=file\example.txt
        getParent()=path   getName()=to
        getParent()=null   getName()=path
    \\path\to\file/example.txt => \\path\to\file/example.txt
        getNameCount()=2
        getParent()=\\path\to\file   getName()=example.txt
        getParent()=null   getName()=\\path\to\file
    
  2. # 2 楼答案

    试试string.replace("\\", "/");然后string.replace("//","/");。这将用“/”替换每个“\”或“”。如果您想要不同的标准,请更改代码,以将“/”替换为特定于操作系统的分隔符