给定像
/a/./b/c/../d
这样的路径,我想删除所有“当前目录”指示符(即句点)和“父目录”指示符(即..),给出a/b/d
。
我可以使用
File.getCanonicalPath()
,但这也解决了符号链接,这是我不想要的。
有什么简单的方法吗?也就是说,比编写分词器并自己处理它更简单。
如果您能告诉我“.”的正确名称,我会加分。和 '..' 就在这种情况下。
您可以在
Apache Commons IO库中使用
FilenameUtils.normalize()
- 请参阅此处的 javadoc。
“Dot”(
.
) 是当前目录,“dot dot”(..
) 是父目录 - 阅读 unix 目录。
也看看这个问题(Java 7 或更高版本): Java:如何使用 nio Path 规范化路径?
该解决方案很棒,但它不可移植(它无法在 Windows 机器上运行)。
Path.normalize 可以满足您的需求,并且不需要任何第三方。从jdk8开始就可用了。
Paths.get("/a/./b/c/../d").normalize()
=> /a/b/d
但请注意,它将根据当前操作系统解析路径。在 Windows 上执行相同的命令会产生不同的结果。
Paths.get("/a/./b/c/../d").normalize()
=> \a\b\d