将文件路径转换为字符串,以标准化" Java中的字符串

时间:2015-12-03 09:30:03

标签: java string filesystems nio

我想知道将任何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")
 );

0 个答案:

没有答案