我想知道将任何Path
(平台无关)转换为表示为字符串的规范化路径的最佳方法是什么。
要求是,在规范化时,代表文件系统上同一对象的所有可能路径必须产生相等的字符串。
此规范化函数必须能够处理符号链接,不存在的文件,相对/绝对路径以及标准文件系统的其他可能的陷阱。可以抛出IOException
。
我认为,这可行:
public String normalizedFileName(String pathString) throws IOException {
final Path path = Paths.get(pathString);
return Files.isReadable(path) ? path.toRealPath().toString() : path.toAbsolutePath().normalize().toString();
}
我会很感激能够解释为什么我的功能不足的答案。
修改
这不起作用:
假设/tmp
是/private/tmp
% ls -al / | grep tmp
lrwxr-xr-x@ 1 root wheel 11 Apr 14 2015 tmp -> private/tmp
以下路径未正确归一化(即断言失败)
assertEquals(
normalizedFileName("/tmp/non-existent-file.tmp"),
normalizedFileName("/private/tmp/non-existent-file.tmp")
);