【问题标题】:How to get a clean absolute file path in Java regardless of OS?无论操作系统如何,如何在 Java 中获得干净的绝对文件路径?
【发布时间】:2013-04-12 19:36:50
【问题描述】:

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

"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)而不试图隐式绝对化它?

【问题讨论】:

  • 试试类似.. File f = new File("C:/shared_resources/samples\\import_packages\\catalog.zip"); System.out.println(f.toURI().toURL());

标签: java path filepath


【解决方案1】:

你可以使用:

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

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

【讨论】:

    【解决方案2】:

    尝试来自 Apache 的 FilenameUtils.normalize() commons-io

    【讨论】:

      【解决方案3】:

      试试这个:

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

      【讨论】:

      • 这会留下一个.:. 得到D:\git-repositories\winery\winery\. 而不是D:\git-repositories\winery\winery。在末尾添加normalize() 也会删除最终的.。
      • toAbsolutePath() 不会消除冗余的相关部分。
      【解决方案4】:

      例如这里是你的路径:

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

      【讨论】:

        猜你喜欢
        • 2015-11-16
        • 1970-01-01
        • 2019-08-16
        • 2020-04-10
        • 1970-01-01
        • 1970-01-01
        • 2014-05-24
        • 2012-07-17
        • 1970-01-01
        相关资源
        最近更新 更多