File file = new File("path to file alias foo");
其中“文件别名 foo 的路径”是报告文件大小为 0 而不是实际文件大小的别名。我找到了一个测试别名的解决方法:
public boolean isLink() {
try {
if (file.getAbsolutePath().equals(file.getCanonicalPath())) {
return false;
}
} catch (IOException ex) {
logger.severe(ex.getMessage());
}
return true;
}
编辑 实际上,正如下面的海报所指出的,这段代码不起作用。我试图改编 Linux 符号链接(symbolic link)示例中的解决方案,但我没有意识到查找器别名和符号链接(symbolic link)并不相同。
不!这似乎有效,但是......
file.getCanonicalFile().length();
仍然报告文件长度为 0。有人能指出我正确的方向吗?
最佳答案
Finder 别名与普通的符号链接(symbolic link)完全不同。我相信 OS X 上的 *nix 工具根本不知道别名,因为它们存储在资源分支中。如果您安装osxutils
,您可以使用此 shell 命令来获取别名的目标:
hfsdata -e the-alias
在 Java 中,除了调用 Runtime.exec(...)
之外,我不知道还有什么更好的方法。
此外,我刚刚进行了快速检查,您的别名检测功能不起作用。 AFAICT,Java 不知道 Finder 别名。如果您真的想要支持它们,那么您要么需要使用osxutils
之类的东西,要么使用一些特定于平台的代码来读取资源 fork (可能会涉及JNI) )。这两种选择都不好。
如果您选择 JNI 路线,请查看 Alias Manager Reference文档。相关函数为FSIsAliasFile
和 FSResolveAliasFile
.
关于Java 在 Mac OSX 上将别名(符号链接(symbolic link))报告为大小 0。如何获得真实的文件大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/962249/