Java中带不同分隔符的统一路径 3 周,4 日 Questions & Answers 58 我有一条输入路径,没有统一的分隔符 例如: path/to/file\example.txt 或者 \\path\to\file/example.txt 如何在Java中基于路径的第一部分统一分隔符
# 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 楼答案 试试string.replace("\\", "/");然后string.replace("//","/");。这将用“/”替换每个“\”或“”。如果您想要不同的标准,请更改代码,以将“/”替换为特定于操作系统的分隔符
# 1 楼答案
一般来说,永远不要使用字符串替换来处理操作系统路径。Java对NIO
Path
类中的OS路径名有很好的支持只需将输入作为
Path p = Path.of(input)
传递即可生成path实例,而不管输入斜杠的组合如何。然后p.toString()
应该生成等效的OS路径:请注意,Windows将这两种类型的斜杠处理为Windows路径分隔符
\
,因此file\example.txt
被视为文件夹file
中名为example.txt
的文件的路径,UNC路径前缀作为一个父路径组件\\SERVER\rootpath
而不是\\SERVER
链接在一起,然后rootpath
:Linux将Windows路径分隔符
\
作为文件名的一部分处理,以便to/file\example.txt
被视为文件夹to
中名为file\example.txt
的文件的路径,UNC路径名被视为包含多个\
的一个名称:# 2 楼答案
试试
string.replace("\\", "/");
然后string.replace("//","/");
。这将用“/”替换每个“\”或“”。如果您想要不同的标准,请更改代码,以将“/”替换为特定于操作系统的分隔符