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

时间:2012-11-08 01:49:10

标签: java file filesystems guava apache-commons

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

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

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

如果你可以告诉我“。”的正确名称,可以获得奖励积分。和'..'就是在这种背景下。

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:5)

您可以在Apache Commons IO库中使用FilenameUtils.normalize() - see javadoc here

“Dot”(.)是当前目录,“dot dot”(..)是父目录 - read up on unix directories

答案 2 :(得分:1)

还要看一下这个问题(Java 7或更新版本): Java: how to normalize paths with nio Path?

解决方案很棒,但它不可移植(它不适用于Windows机器)。