2012-09-09 120 views
4

我正在創建一個應用程序,用戶可以非常容易地點擊應用程序中的鏈接,該鏈接在Finder中打開一個特定文件夾(在Mac中)/Windows資源管理器。這可能發生在鏈接或按鈕的點擊事件上。使用Java Swing打開查找器/資源管理器

有沒有一種方法可以通過Swing打開這些原生OS應用程序(用於特定文件夾)?

+0

*「特定文件夾」*系統文件夾,由您的應用程序創建的目錄。或應用程序。安裝程序,還是別的什麼? –

+0

更重要的是,這提供了哪些用戶功能?瀏覽用戶媒體?瀏覽已安裝的模板/插件?看看應用程序。安裝/屬性目錄? .. –

回答

9

使用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); 

} 
+3

JRE 1.5及更早版本的合理回落。 – trashgod

22

答案很簡單:

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提到討厭HeadlessExceptionUnsupportedOperationException例外保存之前。

+4

+1,如果JRE 1.6+可用,則爲最簡單的跨平臺解決方案。 – trashgod

+1

這個解決方案在Apple嘗試多次使用'Desktop.getDesktop()。browse(new File(「/ Users/John/Desktop」).URI())後失敗了;'這隻能在Windows上正常工作。在Apple上,症狀是將Finder打開到最後瀏覽的位置。我的錯誤(不當使用「瀏覽」,所以想分享)。 – tresf

+1

在調用「桌面」方法之前,在某些情況下檢查是否支持所需的操作可能很方便,例如, 'Desktop.getDesktop()。則isSupported(Desktop.Action.OPEN)'。 –

相關問題