如何在Java中获得一个干净的绝对文件路径,而不管操作系统如何?

2022-09-01 21:01:45

这就是问题所在。经过一些串联后,我可能会碰巧有一个这样的字符串

"C:/shared_resources/samples\\import_packages\\catalog.zip"

甚至这个

"C:/shared_resources/samples/subfolder/..\\import_packages\\catalog.zip"

我想要一些代码,可以将这样的字符串转换为具有统一分隔符的路径。

想到的第一个解决方案是 使用 ,但这是棘手的部分。此方法依赖于调用测试的系统。但是,我需要将字符串传递给远程计算机(带有浏览器的Selenium Grid节点),并且这里和那里的系统分别是Linux和Windows。因此,尝试这样做会导致类似 .使用钝的正则表达式替换似乎也不是一个很好的解决方案。new File(srcPath).getCanonicalPath()new File("C:/shared_resources/samples\\import_packages\\catalog.zip").getCanonicalPath()"/home/username/ourproject/C:/shared_resources/samples/import_packages/catalog.zip"

有没有办法修剪路径并使分隔符统一(并可能解析)而不试图隐式绝对化它?..


答案 1

试试这个:

import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Main {
    public static void main(String[] args) throws IOException {
        Path path = Paths.get("myFile.txt");
        Path absolutePath = path.toAbsolutePath();

        System.out.println(absolutePath.toString());
    }
}

答案 2

您可以使用:

Path absolutePath = path.toAbsolutePath().normalize();

...至少要消除冗余的相对部分。正如 normalize() 的文档中提到的,如果路径的已消除节点实际上是一个链接,则解析的文件可能不同,或者不再可解析。


推荐