无论操作系统如何在Java中获取干净的绝对文件路径?

时间:2013-04-19 11:58:48

标签: java path filepath

这是问题所在。在一些连接之后,我可能碰巧有这样的字符串

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

甚至是

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

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

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

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

4 个答案:

答案 0 :(得分:21)

试试这个:

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());
    }
}

答案 1 :(得分:1)

答案 2 :(得分:0)

您可以使用:

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

...至少要消除多余的相对部分。正如normalize()的文档所述,如果路径中被消除的节点实际上是链接,那么解析的文件可能会有所不同,或者不再是可解析的。

答案 3 :(得分:-3)

例如,这是你的路径:

String jarName = "C:/shared_resources/samples\\import_packages\\catalog.zip"
jarName.replaceAll("/", "\\");
jarName.replaceAll("..", "/");