使用 .. 父目录说明符(“点点”)解析路径名,而不解析符号链接

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

给定像

/a/./b/c/../d
这样的路径,我想删除所有“当前目录”指示符(即句点)和“父目录”指示符(即..),给出
a/b/d

我可以使用

File.getCanonicalPath()
,但这也解决了符号链接,这是我不想要的。

有什么简单的方法吗?也就是说,比编写分词器并自己处理它更简单。

如果您能告诉我“.”的正确名称,我会加分。和 '..' 就在这种情况下。

java file filesystems guava apache-commons
4个回答
13
投票

番石榴也有这个作为

Files.simplifyPath(String)
。不过,您最好的选择(如果您可以使用 JDK7)是将您的路径表示为
Path
并使用
Path.normalize()
来获取标准化版本。


4
投票

您可以在

Apache Commons IO
库中使用 FilenameUtils.normalize() - 请参阅此处的 javadoc

“Dot”(

.
) 是当前目录,“dot dot”(
..
) 是父目录 - 阅读 unix 目录


2
投票

也看看这个问题(Java 7 或更高版本): Java:如何使用 nio Path 规范化路径?

该解决方案很棒,但它不可移植(它无法在 Windows 机器上运行)。


0
投票

Path.normalize 可以满足您的需求,并且不需要任何第三方。从jdk8开始就可用了。

Paths.get("/a/./b/c/../d").normalize()
=> /a/b/d

但请注意,它将根据当前操作系统解析路径。在 Windows 上执行相同的命令会产生不同的结果。

Paths.get("/a/./b/c/../d").normalize()
=> \a\b\d
© www.soinside.com 2019 - 2024. All rights reserved.