如何在Java中获得干净的绝对文件路径而不管OS是什么?

问题描述 投票:22回答:4

这是问题。经过一些串联后,我可能碰巧遇到了这样的字符串

"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"的情况。而且使用过时的正则表达式替换似乎也不是一个很好的解决方案。

有没有一种方法可以修剪路径并使分隔符统一(并可能解析..),而不必尝试隐式地对其进行绝对化?

java path filepath
4个回答
24
投票

尝试一下:

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
投票

尝试从Apache FilenameUtils.normalize()获得FilenameUtils.normalize()


0
投票

您可以使用:

commons-io

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


-3
投票

例如,这是您的路径:

Path absolutePath = path.toAbsolutePath().normalize();
© www.soinside.com 2019 - 2024. All rights reserved.