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来查找桌面?我的临时解决方案是使用the similar Windows-oriented question here的答案:
public static File getDesktopFolder() {
return new File(System.getProperty("user.home"), "Desktop");
}
然而,在某些语言环境或某些奇怪配置的系统中,这似乎很脆弱并且可能存在错误。
答案 0 :(得分:0)
Platform-Specific Desktop Features。
com.apple.eawt
和com.apple.eio
包中的API是 封装,因此您将无法在JDK 9中针对它们进行编译。 但是,它们在运行时仍可访问,因此现有代码即可 编译为旧版本继续运行。最终,使用
apple
和com.apple
中内部类的库或应用程序 软件包及其子软件包需要迁移到新的API。
JEP:272 中提议的用于迁移代码的新API为 java.awt.Desktop
.
虽然我可以在同一个API中看到edit
,open
,browse
等存根,但所有这些存根都需要合法的指定路径名,而且没有一个根据文档创建一个。< / p>
此外,我不太清楚为什么你会发现现有的方法是脆弱的,以便在用户桌面上创建文件。
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
as proposed in Module System
--add-exports java.desktop/com.apple.eio=ALL-UNNAMED