23

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

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

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

4

4 回答 4

30

试试这个:

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());
    }
}
于 2013-04-19T18:04:33.910 回答
2

您可以使用:

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

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

于 2019-10-09T10:26:34.260 回答
0

FilenameUtils.normalize()从 Apache commons-io尝试

于 2013-09-07T19:44:20.387 回答
-4

例如,这是您的路径:

String jarName = "C:/shared_resources/samples\\import_packages\\catalog.zip"
jarName.replaceAll("/", "\\");
jarName.replaceAll("..", "/");
于 2013-04-19T14:55:42.113 回答