2013-01-07 19 views
2

我遇到以下問題:獲取能夠打開文件的編輯列表

我編寫了一個應用程序,用戶可以在其中打開一些特定的文件。 用戶應該能夠選擇編輯器,他想要打開文件。

目前我與這片代碼做:

public void open(String path) { 
    try { 
     if(new File(path).exists()) 
      Runtime.getRuntime().exec("notepad.exe " + path); 

    } catch (IOException e) { 

    } 
} 

如果我將改變這個編輯器ultraedit.exe例如,在運行時將無法打開它。

所以,現在我的問題,有什麼辦法,實現像open with函數窗口正在使用,並返回所有可能的編輯器爲特定類型的文件? 文件的擴展將是百達.ini

+2

這有幫助嗎? http://stackoverflow.com/questions/5197880/java-accessing-windows-open-with-list – Behe

+0

哇,我沒有發現這個問題,它真的幫了很多。 在下面的評論中,這段代碼確實是我想要的。 'rundll32.exe shell32.dll,OpenAs_RunDLL C:\ path \ to \ file.ext' – SomeJavaGuy

回答

1

一種方法(假設:並非所有的跨平臺,但僅適用於Windows)是使用assocftype命令從cmd.exe列出與一個特定的文件類型關聯的應用程序,也看到Utilising a file association in a Java application

這是兩個步驟:首先,通過assoc得到擴展(.ini)文件類型(inifile),然後通過ftype查找相關的文件類型的可執行文件:

C:> cmd.exe /c assoc .ini 
.ini=inifile 

C:> cmd.exe /c ftype inifile 
inifile=%SystemRoot%\system32\NOTEPAD.EXE %1 

你可以通過Runtime.getRuntime().exec()啓動這些命令並捕獲輸出流以獲取關聯的程序。

+0

好吧,這聽起來不錯,我會查找它 – SomeJavaGuy

+0

可能由@Behe提供的鏈接更有用,一個答案鏈接到http://stackoverflow.com/questions/1238991/open-with-dialog-in-java - 我不確定我的方法是否允許列出「打開方式...」菜單中顯示的所有關聯。它似乎只返回默認關聯(由「打開」菜單使用) –

1

至於我能看到Runtime.exec()無法打開ultraedit.exe因爲ultraedit.exe可能無法在您PATH環境點發現。

您需要檢測ultraedit.exe的位置,然後用完整路徑打開它。這應該工作。

+0

好的,但我應該如何處理編輯器,我可能不知道,但用戶想與之合作? – SomeJavaGuy

+0

您可以實現一個像Windows這樣的對話框,讓用戶能夠告知ultraedit.exe的放置位置。您可以序列化這些信息並在需要這些信息時加載它。 – Stefan

0

在XP至少(我沒有辦法在目前檢查的Win 7)安裝的應用程序的路徑可以在註冊表中找到下

\\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\<program name> 

爲了更方便(便攜)解決方案我會添加一個列出編輯器的配置文件和可執行文件的完整路徑。

0

如果有的話,你可以嘗試Desktop#open

啓動關聯應用程序來打開該文件。如果指定的 文件是一個目錄,則啓動當前平臺的文件管理器 以打開它。