java.nio.Path:如何强制Java解析相对路径中的`..`(基于当前目录)?
解决方法
你的路径定义Path.of("../foo/bar.txt")在当前目录为baz/的情况下,实际指向的是baz父目录下的foo/bar.txt,但根据给定的目录结构,目标文件其实位于baz/foo/bar.txt,所以优先建议直接把路径修正为Path.of("foo/bar.txt"),这是最合理的方式。
如果必须处理现有带../的Path对象,要让它显示成baz/foo/bar.txt,可以通过Java的Path API正确实现:
- 先获取当前工作目录的绝对路径:
Path currentDir = Path.of("").toAbsolutePath();
- 构造对应实际文件的路径:
Path actualFilePath = currentDir.resolve("foo/bar.txt");
- 再获取这个路径相对于当前目录父目录的相对路径,就能得到想要的显示格式:
Path displayPath = currentDir.getParent().relativize(actualFilePath); System.out.println(displayPath); // 输出 baz/foo/bar.txt
要是你只是想临时强制替换路径里的../为baz/(不考虑路径实际指向是否存在),可以用字符串替换,但这种方法不推荐,仅适用于特殊场景:
String displayPath = foo.toString().replace("../", "baz/"); System.out.println(displayPath); // 输出 baz/foo/bar.txt
内容的提问来源于stack exchange,提问作者Carson McManus
相关产品推荐
相关产品推荐

