我正在創建一個應用程序,用戶可以非常容易地點擊應用程序中的鏈接,該鏈接在Finder中打開一個特定文件夾(在Mac中)/Windows資源管理器。這可能發生在鏈接或按鈕的點擊事件上。使用Java Swing打開查找器/資源管理器
有沒有一種方法可以通過Swing打開這些原生OS應用程序(用於特定文件夾)?
我正在創建一個應用程序,用戶可以非常容易地點擊應用程序中的鏈接,該鏈接在Finder中打開一個特定文件夾(在Mac中)/Windows資源管理器。這可能發生在鏈接或按鈕的點擊事件上。使用Java Swing打開查找器/資源管理器
有沒有一種方法可以通過Swing打開這些原生OS應用程序(用於特定文件夾)?
使用Runtime.getRuntime().exec("command here");
在運行java的系統中執行命令。
對於explorer.exe,您可以簡單地將文件夾的絕對路徑作爲參數傳遞,例如
Explorer.exe "C:\Program Files\Adobe"
在Mac OS X,你可以使用open
命令:
open /users/
你可以找到如何檢測你是哪個操作系統,因此要運行的代碼,here。例如,這將赤,如果你使用的是Windows:
public static boolean isWindows() {
String os = System.getProperty("os.name").toLowerCase();
// windows
return (os.indexOf("win") >= 0);
}
JRE 1.5及更早版本的合理回落。 – trashgod
答案很簡單:
if (Desktop.isDesktopSupported()) {
Desktop.getDesktop().open(new File("C:\\"));
}
龍答: 雖然讀書是何種操作系統,然後運行OS專用命令將起作用,它在某種程度上需要對需要完成的事情進行硬編碼。
讓Java處理每個操作系統應該如何打開目錄。我們不應該感到頭痛。 < 3抽象。
閱讀#open(File)方法文檔顯示,它將打開支持操作的所有操作系統的鏈接。如果當前平臺不支持打開文件夾或文件(比如說無頭環境?當然,我猜猜爲什麼它不會打開是猜測),它會拋出一個UnsupportedOperationException
。如果用戶無法讀取文件夾(Windows Vista/7/8,基於Unix的機器),您將得到一個SecurityException
。所以,如果你問我,它處理得很好。
更新時間:增加了一個,如果檢查得到Desktop
對象,以便您的代碼是從作爲#getDesktop() Java Documentation提到討厭HeadlessException
和UnsupportedOperationException
例外保存之前。
+1,如果JRE 1.6+可用,則爲最簡單的跨平臺解決方案。 – trashgod
這個解決方案在Apple嘗試多次使用'Desktop.getDesktop()。browse(new File(「/ Users/John/Desktop」).URI())後失敗了;'這隻能在Windows上正常工作。在Apple上,症狀是將Finder打開到最後瀏覽的位置。我的錯誤(不當使用「瀏覽」,所以想分享)。 – tresf
在調用「桌面」方法之前,在某些情況下檢查是否支持所需的操作可能很方便,例如, 'Desktop.getDesktop()。則isSupported(Desktop.Action.OPEN)'。 –
*「特定文件夾」*系統文件夾,由您的應用程序創建的目錄。或應用程序。安裝程序,還是別的什麼? –
更重要的是,這提供了哪些用戶功能?瀏覽用戶媒體?瀏覽已安裝的模板/插件?看看應用程序。安裝/屬性目錄? .. –