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符号链接示例改编解决方案,但我没有意识到finder别名和符号链接并不相同。
不!这似乎可行,但是....
file.getCanonicalFile().length();
仍然报告文件长度为0。有人能指出我正确的方向吗?
最佳答案
Finder别名与普通符号链接完全不同。我相信,OS X上的* nix工具根本不了解别名,因为它们存储在资源派生中。如果安装osxutils
,则可以使用以下shell命令来获取别名的目标:
hfsdata -e the-alias
在Java中,除了调用
Runtime.exec(...)
外,我不知道有更好的方法。另外,我只是做了一个快速检查,并且您用于检测别名的功能不起作用。 AFAICT,Java不了解Finder别名。如果您确实想支持它们,那么您要么需要使用
osxutils
之类的东西,要么需要使用特定于平台的代码来读取资源派生(可能涉及JNI)。这两个选项都不是很漂亮。如果您选择JNI路线,请查阅Alias Manager Reference文档。相关功能为
FSIsAliasFile
和FSResolveAliasFile
。