Java 在 Mac OSX 上将别名(符号链接(symbolic link))报告为大小 0。如何获得真实的文件大小?

标签 java macos alias symlink

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文档。相关函数为FSIsAliasFileFSResolveAliasFile .

关于Java 在 Mac OSX 上将别名(符号链接(symbolic link))报告为大小 0。如何获得真实的文件大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/962249/

相关文章:

java - 将 RecyclerView 中的项目更改为 onBindViewHolder

bash - 在 Bash 中通配重音文件

macos - 沙盒下的 NSOpenPanel - 访问用户选定文件夹内的所有文件

indexing - 如何创建排除特定字段的Elasticsearch索引别名

bash - 在 find -exec 中使用别名

java - 无法在 java 中为 Web 服务创建客户端

java - Java中使用正则表达式匹配字符串并生成序列

macos - 如何在 Mac OSX 上安装 PostgreSQL-contrib-9.3?

c++ - 帮助使用 boost.log 和 boost.build (bjam) 别名,构建并包含在目标中

java - 如何使用 NameValuePair 将数组值发送到 servlet?