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文档。相关功能为FSIsAliasFileFSResolveAliasFile

10-06 13:47
查看更多