Java Paths类具有以下创建Path对象的有用方法:
Path path = Paths.get("a", "b", "c", "d", "e.txt");但是,使用这种方法,结果路径相对于调用目录。获得绝对路径的最佳platform-independent方法是什么(透明地结合了\和Unix /约定)?
发布于 2020-07-24 15:47:58
如果您有一个需要成为绝对路径的Path对象,则只需在其上调用toAbsolutePath();请注意,path对象知道平台分隔符是什么;它已经与平台无关,无需手动转换任何斜杠。
如果您的意思是:我有一串字符串,我想在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,它也能正常工作,从那里开始的操作已经完全独立于平台了。
https://stackoverflow.com/questions/63076700
复制相似问题