2009-02-08 28 views
12

我想弄清楚如何打開給定文件的系統首選編輯器。如何打開給定文件的用戶系統首選編輯器?

說,我們有一個文件管理器,用Java編寫。用戶轉到文件夾並看到文件列表。例如,有一個文件Icon.jpg。用戶雙擊文件名並在系統首選編輯器(即GIMP)中打開文件。主要問題是 - 如何做到這一點?

我們可以做Runtime.getRuntime().exec("something file"),但這種方式你應該知道哪個程序是用戶環境中的首選。但是如何?

我們也可以做Desktop.getDesktop().edit(File file),但這種方式我們無法跟蹤進程,並且無法知道這個子進程是關閉的。其他問題 - 函數在linux上不起作用(至少在Ubuntu 8.10上)。還有Desktop.getDesktop().open(File file),但它強制打開文件查看器,而不是該文件類型的系統查看器。

我正在尋找解決方案整個星期,但沒有得到任何合適的和通用的。你知道這個問題的其他方法嗎?對於我的項目來說,如果它能在Windows + Linux + Mac上運行就足夠了。

謝謝你的回答和建議。

於2009-02-08 23:04

其他建議編輯:我可以強制「應用程序選擇」窗口,在Windows和Linux中,如Mac上「打開文件」?例如,你試圖打開文件,你被要求從系統首選列表中選擇應用程序? (就像在Windows資源管理器中「打開...」一樣)。你知道嗎?

+0

其他建議:我可以強制在Windows和Linux中的「應用程序選擇」窗口,在Mac嗎?例如,然後你試圖打開文件,那麼你被要求從系統預定義列表中選擇應用程序的選擇? (就像在Windows資源管理器中「打開...」)。 你知道嗎? – 2009-02-08 21:53:26

回答

7

看來,如果你不能使用java.awt.Desktop你有操作系統之間的區別: 的Windows:

RUNDLL32.EXE SHELL32.DLL,OpenAs_RunDLL <file.ext> 

的Linux:

edit <file.ext> 

的Mac:

open <file.ext> 

HTH。顯然,這不是很便攜...

+0

這些是控制檯命令,我應該寫入Runtime.getRuntime()。exec()函數,對吧? – 2009-02-08 18:08:56

+0

@ArturasSmorgun,是的 – 2012-06-18 11:11:23

2

這不是跨平臺的,但在Mac OS X,你可以做

Runtime.getRuntime().exec("open filename"); 

open(1)可執行文件使用LaunchServices選擇合適的程序來執行,然後再使用它來打開一個名爲filename文件。

+0

謝謝,我會嘗試。這對我來說非常有用,因爲現在我只能在Ubuntu和Linux上測試我的代碼,並且不知道它在Mac上如何。 :) – 2009-02-08 18:07:52

7

檢查出java.awt.Desktop對象。在你的情況,你要調用edit()

如果要確保給定的平臺支持這一呼籲,那麼你可以做類似如下(我沒有測試此代碼):

public boolean editFile(final File file) { 
    if (!Desktop.isDesktopSupported()) { 
    return false; 
    } 

    Desktop desktop = Desktop.getDesktop(); 
    if (!desktop.isSupported(Desktop.Action.EDIT)) { 
    return false; 
    } 

    try { 
    desktop.edit(file); 
    } catch (IOException e) { 
    // Log an error 
    return false; 
    } 

    return true; 
} 
+0

我絕對知道,edit()不適用於Ubuntu。但是這個功能對我來說是必需的。如果edit()不被支持,你知道我該怎麼做嗎? – 2009-02-08 17:45:30

-2

這將在Windows

工作
Runtime.getRuntime().exec("CMD /C START filename.ext "); 
相關問題