创建绝对路径

时间:2020-07-24 15:28:22

标签: java

Java Paths类具有以下用于创建Path对象的有用方法:

Path path = Paths.get("a", "b", "c", "d", "e.txt");

但是,通过这种方法,结果路径是相对于调用目录的。 独立于平台的最佳方法是获取绝对路径(一种透明地结合了Windows \和Unix /约定的绝对路径)的方法?

1 个答案:

答案 0 :(得分:1)

如果您有一个Path对象,而该对象需要是绝对路径,则只需在其上调用toAbsolutePath()即可;请注意,路径对象知道平台分隔符是什么;它已经独立于平台,无需手动转换任何斜杠。

如果您的意思是:我有一堆字符串,并且我想在UNIX上获取表示/a/b/c/d/e.txt的路径,而在Windows上希望获取表示C:\a\b\c\d\e.txt的路径,那是一个问题。因为C:实际上并不是您要假设的东西。

然后您的问题将无法回答:事实证明,如果要完全独立于平台,则没有“根目录”这样的概念。在Windows上,人们只能说“根目录”,并且连接到驱动器号的文件系统数量也很多,而且这也是一个棘手的抽象,因为Windows实际上可以使用\\drive-identifier\path模型。

您可能需要调查的事情:

for (Path p : FileSystems.getDefault().getRootDirectories()) {
    System.out.println("Found a root: " + p);
}

例如,您可以选择“仅从第一个根开始,不管它是什么”:


Path root = FileSystems.getDefault().getRootDirectories().iterator().next();
Path p = root.resolve(Paths.get("a", "b", "c", "d", "e.txt"));
System.out.println(p);

这是否是您想要的根目录(大概是C :)-将取决于很多因素。

最好的办法是忘记使用单独的字符串。如果要接受代表绝对路径的用户输入,请选择一个字符串。 Windows用户必须输入类似C:\Users\Sandeep\hello.txt的内容,而Paths.get()对该输入完全没有问题。 Mac上的用户可能会键入/Users/Sandeep/hello.txt,如果将其输入Path,它也可以很好地工作,并且此后的操作已经完全独立于平台。