2016-09-21 148 views
3

Java 9禁止直接使用com.apple.eio.FileManager。到現在爲止我用這個在Mac上獲得用戶的「桌面」路徑的位置,如下如何在Mac 9上獲得Java 9中的桌面路徑

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

Platform-Specific Desktop Features已在JDK9中刪除。

com.apple.eawtcom.apple.eio包的API是 封裝,所以你將無法編譯對他們在JDK 9 然而,他們仍然可以訪問在運行時,使得 編譯現有代碼舊版本繼續運行。

最終,使用applecom.apple 程序包及其子包中的內部類的庫或應用程序將需要遷移到新的API。

新的API遷移,而不是作爲JEP:272提出的代碼是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 as proposed in Module System

--add-exports java.desktop/com.apple.eio=ALL-UNNAMED