【发布时间】:2011-02-10 15:19:15
【问题描述】:
有谁知道我可以用来生成规范路径的任何 Java 库(基本上删除反向引用)。
我需要一些能做以下事情的东西:
原始路径 -> 规范路径
/../foo/ -> /foo
/foo/ -> /foo
/../../../ -> /
/./foo/./ -> /foo
//foo//bar -> /foo/bar
//foo/../bar -> /bar
等等……
目前我懒惰地依赖使用:
new File("/", path).getCanonicalPath();
但这会根据实际文件系统解析路径,并且是同步的。
java.lang.Thread.State: BLOCKED (on object monitor)
at java.io.ExpiringCache.get(ExpiringCache.java:55)
- waiting to lock <0x93a0d180> (a java.io.ExpiringCache)
at java.io.UnixFileSystem.canonicalize(UnixFileSystem.java:137)
at java.io.File.getCanonicalPath(File.java:559)
我正在规范化的路径在我的文件系统上不存在,因此只需该方法的逻辑就可以了,因此不需要任何同步。我希望有一个经过良好测试的库,而不是自己编写。
【问题讨论】:
-
是否支持相对路径作为输入?或者这是一个错误情况?
-
/foo/../bar/的输出应该是什么? -
@Joachim:我假设所有路径都基于根。在大多数情况下,我只是从 url 中的路径中删除反向引用。
-
@Joachim - 不,getAbsPath 导致输入 '/foo/../bar' 的结果为 '/foo/../bar'