4

Java 9 禁止直接使用 com.apple.eio.FileManager。到现在我在Mac上都是用这个来获取用户“桌面”路径的位置,如下

public static File getDesktopFolder() throws FileNotFoundException {
    final int desktopOSType = FileManager.OSTypeToInt("desk");
    final String desktopFolderName = FileManager.findFolder(desktopOSType);
    return new File(desktopFolderName);
}

Java 9 中是否有使用 com.apple.eio.FileManager 查找桌面的替代品?我的临时解决方案是在这里使用类似的面向 Windows 的问题的答案:

public static File getDesktopFolder() {
    return new File(System.getProperty("user.home"), "Desktop");
}

然而,在某些语言环境或某些奇怪配置的系统上,这似乎很脆弱并且可能存在错误。

4

1 回答 1

1

JDK9 中删除了特定于平台的桌面功能。

com.apple.eawt和包中的 APIcom.apple.eio是封装的,因此您将无法在 JDK 9 中针对它们进行编译。但是,它们在运行时仍可访问,因此编译为旧版本的现有代码将继续运行。

apple最终,使用andcom.apple 包及其子包中的内部类的库或应用程序将需要迁移到新的 API。

JEP:272中提议的用于迁移代码的新 API是java.awt.Desktop. 虽然我可以在同一个 API 中看到editopenbrowse存根,但它们都需要一个合法的指定路径名,并且没有一个根据文档创建一个。

此外,我不太确定为什么您会发现现有方法在用户桌面上创建文件时会变得脆弱且有缺陷。

return new File(System.getProperty("user.home"), "Desktop");

在 Java 9 中使用现有代码的另一种方法/临时破解,当您最终可能会遇到类似于

Error:(3, 17) java: package com.apple.eio is not visible   (package
com.apple.eio is declared in module java.desktop, which does not
export it)

是在编译期间--add-exports按照模块系统中的建议使用

--add-exports java.desktop/com.apple.eio=ALL-UNNAMED
于 2017-10-16T06:45:22.263 回答