如何在Mac上的Java 9中获取桌面路径

时间:2016-09-21 08:30:51

标签: java macos java-9

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");
}

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

1 个答案:

答案 0 :(得分:0)

JDK9中已删除

Platform-Specific Desktop Features

  

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

     

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

JEP:272 中提议的用于迁移代码的新API为 java.awt.Desktop. 虽然我可以在同一个API中看到editopenbrowse等存根,但所有这些存根都需要合法的指定路径名,而且没有一个根据文档创建一个。< / 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