在Java7中如何通过字符串创建路径

355

我该如何在Java 7中从String对象创建一个java.nio.file.Path对象?

即:

String textPath = "c:/dir1/dir2/dir3";
Path path = ?;

其中?是使用textPath的缺失代码。

4个回答

577
您可以直接使用Paths类:
Path path = Paths.get(textPath);

......假设你当然想使用默认的文件系统。


1
@JonSkeet 是这样的,Path.get() 是跨平台的吗?也就是说,Path.get("lib","p2") 在 Windows 中会被解释为 lib\p2,在 Linux 中则会被解释为 lib/p2 - Kasun Siyambalapitiya
2
@KasunSiyambalapitiya:是的,那样应该没问题。 - Jon Skeet
1
@JonSkeet Paths.get("/opt/path/"); 返回的是 "\opt\path"。您能否提供解决方案? - deadend
@DEADEND:你在使用Windows吗?如果是的话,它以什么方式给你带来了问题?听起来你可能应该提一个新的问题。 - Jon Skeet
@JonSkeet。抱歉,我之前在Windows上运行。现在问题已经解决了。谢谢。 - deadend
显示剩余2条评论

25

从Javadocs中... http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html

Path p1 = Paths.get("/tmp/foo"); 

相同。

Path p4 = FileSystems.getDefault().getPath("/tmp/foo");

Path p3 = Paths.get(URI.create("file:///Users/joe/FileTest.java"));

Path p5 = Paths.get(System.getProperty("user.home"),"logs", "foo.log"); 

在Windows中,创建文件C:\joe\logs\foo.log(假设用户主目录为C:\joe)
在Unix中,创建文件/u/joe/logs/foo.log(假设用户主目录为/u/joe)


10
我建议使用File.separator代替关注当前操作系统。例如,"/tmp/foo"就是File.separator+"tmp"+File.separator+"foo" - mat_boy
1
我猜它并不会创建实际的文件,而是创建一个路径对象。你可以使用路径对象,在磁盘上创建实际的文件,使用Files.createFile(logfilePath)。 - Mr.Q

19

如果可能的话,我建议直接从路径元素创建Path

Path path = Paths.get("C:", "dir1", "dir2", "dir3");
// if needed
String textPath = path.toString(); // "C:\\dir1\\dir2\\dir3"

这个平台是独立的吗? - Kasun Siyambalapitiya
1
我相当确定是的。 - Rauni Lillemets
当路径来自环境变量时,这并没有帮助。 - undefined

15

即使问题涉及Java 7,我认为了解从Java 11开始,Path类中有一个静态方法可以直接执行此操作是有价值的:

将所有路径放在一个字符串中:

Path.of("/tmp/foo");

将路径拆分为多个字符串:

Path.of("/tmp","foo");


1
@mat_boy 是的,但这没什么大不了的。该方法已经存在于Java 7中,只是以前被称为Paths.get - DodgyCodeException

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接