Java 创建绝对路径

Java 创建绝对路径,java,Java,JavaPath类有以下有用的方法来创建Path对象: Path path = Paths.get("a", "b", "c", "d", "e.txt"); 但是,使用这种方法,结果路径是相对于调用目录的。获取绝对路径(透明地结合了Windows\和Unix/惯例)的最佳平台无关方法是什么?如果您有一个路径对象,而该对象需要是一个绝对路径,您可以在其上调用以获得绝对路径();注意,路径对象知道

Java
Path
类有以下有用的方法来创建
Path
对象:

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

但是,使用这种方法,结果路径是相对于调用目录的。获取绝对路径(透明地结合了Windows
\
和Unix
/
惯例)的最佳平台无关方法是什么?

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

如果你的意思是:我有一堆字符串,我想在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
,并且
path.get()
对该输入没有任何问题。mac上的用户可能会键入
/Users/Sandeep/hello.txt
,如果您将其输入到
路径中,这也可以正常工作,并且从那里开始的操作已经完全独立于平台。

我认为这甚至没有意义,因为您也有不同的文件系统根(Linux上为“/”,Windows上为“C:”或类似)。无论如何,
path.get(“/usr”、“bin”、“bash”)
应该根据Javadoc工作。如果您已经有了一个要转换为绝对路径的相对路径,
myPath.toAbsolutePath()
是您的朋友。绝对路径的参数是什么?Windows接受Unix正斜杠约定。File.separator提供平台特定的路径分隔符。