2010-06-07 49 views
2

我希望使用計算機上安裝的相關程序從Java應用程序打開文件(可以說是一個word文檔)(在本例中,使用MS Word或Open Office作家)。查找相關程序以使用Java打開文件

問題是我想等到這個子進程結束,這可以使用Process類中的waitFor()方法完成。

String executable = findAssociatedApplicationPath(); //for example, returns "C:\\Program Files\\Microsoft Office\\Office12\\msword.exe" 
Process p = Runtime.getRuntime().exec(executable + " " + filepath); 
p.waitFor(); 

有人能告訴我如何編寫findAssociatedApplicationPath()方法,以便它返回正確的可執行文件嗎?還是有另一種方法來做到這一點?

回答

2

使用相關程序打開文件的適當平臺無關方式是Desktop.open()。不幸的是,它沒有提供任何方式與結果進程交互。

如果你願意失去平臺的獨立性,可以在cmd.exe使用start命令:

String fileName = "c:\\tmp\\test.doc"; 
String[] commands = {"cmd", "/c", "start", "\"Title\"",fileName}; 
Process p = Runtime.getRuntime().exec(commands); 
p.waitFor() 
0

有沒有純Java的方式來做到這一點,因爲這是必然操作系統相關的。在Windows平臺上,the start command可能是您要查找的內容(例如,start myfile.txt)。

0

在所有平臺上都沒有「通用」的方法。在Windows上,您可以執行「開始」,它將找到正確的關聯可執行文件。在Mac上,您可以執行「打開」。在Linux上,恐怕您必須手動映射首選應用程序。

String execName = ("cmd /c \"start " + filename + "\""); 
+0

Linux有同樣依賴於平臺的解決方案,如Windows,除非他們因爲安裝的不同而不同。例如,Gnome已經開放了GNOME。 – 2010-06-07 15:46:43

0

你可以嘗試更動Windows註冊表和其他特定於平臺的設置,但我認爲最好的辦法是簡單地讓應用程序有自己的喜好設置。

您可能需要爲此使用package java.util.prefs中的類。

0

我已經想通了。

使用cmd.exe + start.exe組合,方法waitFor()不會等待子進程結束。

如果這樣做沒有它就像一個魅力(僅限Windows雖然)啓動選項:

Process p = Runtime.getRuntime().exec("cmd /c \"" + filename + "\""); //extra quotes for filenames with spaces 
p.waitFor() 
相關問題