我刚遇到这个问题。如果你有一个相对路径,你可以使用它Path
的一个Iterable<Path>
元素,跟随一个可选的初始根元素,然后可以自己用正斜杠连接这些片段。不幸的是,根元素可以包含斜杠,例如在 Windows 中,您会得到像c:\
和\\foo\bar\
(对于 UNC 路径)这样的根元素,因此无论您仍然需要用正斜杠替换什么,似乎都是如此。但是你可以做这样的事情......
static public String pathToPortableString(Path p)
{
StringBuilder sb = new StringBuilder();
boolean first = true;
Path root = p.getRoot();
if (root != null)
{
sb.append(root.toString().replace('\\','/'));
/* root elements appear to contain their
* own ending separator, so we don't set "first" to false
*/
}
for (Path element : p)
{
if (first)
first = false;
else
sb.append("/");
sb.append(element.toString());
}
return sb.toString();
}
当我用这段代码测试它时:
static public void doit(String rawpath)
{
File f = new File(rawpath);
Path p = f.toPath();
System.out.println("Path: "+p.toString());
System.out.println(" "+pathToPortableString(p));
}
static public void main(String[] args) {
doit("\\\\quux\\foo\\bar\\baz.pdf");
doit("c:\\foo\\bar\\baz.pdf");
doit("\\foo\\bar\\baz.pdf");
doit("foo\\bar\\baz.pdf");
doit("bar\\baz.pdf");
doit("bar\\");
doit("bar");
}
我明白了:
Path: \\quux\foo\bar\baz.pdf
//quux/foo/bar/baz.pdf
Path: c:\foo\bar\baz.pdf
c:/foo/bar/baz.pdf
Path: \foo\bar\baz.pdf
/foo/bar/baz.pdf
Path: foo\bar\baz.pdf
foo/bar/baz.pdf
Path: bar\baz.pdf
bar/baz.pdf
Path: bar
bar
Path: bar
bar
用正斜杠替换反斜杠的文本肯定更容易,但我不知道它是否会破坏一些迂回的边缘情况。(Unix 路径中可以有反斜杠吗?)