java 呼叫本地應用程式 Java開啟(.word,.txt,.pdf)檔案
我的java專案中需要開啟一些doc、ppt、rar等檔案,以前的方法是使用類似於Runtime.getRuntime().exec("應用程式路徑", "檔案路徑")的形式去開啟,發現可移植性很差,當專案移植到其他不同的機器時,由於應用程式可能安裝在不同的目錄,就會找不到路徑。
後來找到一種更好的方法,
Runtime.getRuntime().exec("rundll32 url.dll FileProtocolHandler " + filepath)
在測試了以上檔案型別後發現執行正確,類似與windows下預設開啟本地檔案一樣方便。
具體原理在一片文章上看的似懂非懂,原文如下:
windows系統提供了一個叫Rundll32.exe的檔案,顧名思義,它的作用是執行DLL檔案中的內部函式,這樣在程序當中,只會有rundll32.exe,而不會有DLL後門的程序,這樣,就實現了程序上的隱藏。rundll32.exe的具體使用方法如下:
Rundll32.exe DLLname,Functionname [Arguments]
DLLname為需要執行的DLL檔名;Functionname為前邊需要執行的DLL檔案的具體引出函式;[Arguments]為引出函式的具體引數。
結合url.dll和rundll32.exe,我們就可以通過在命令列中啟動相應程式開啟相應文件: 假設我有一個pdf文件,存放在c:\test.pdf 。開啟命令列, 執行如下 命令:
rundll32 url.dll FileProtocolHandler
下面是通過JFileChoose對話方塊,選中一個檔案之後,開啟所選的檔案,像直接雙擊開啟檔案一樣的,開啟選中的檔案
JFileChooser chooseFile = new JFileChooser(); FileFilter filter = new FileFilter() { //要過濾的檔案 public boolean accept(File f) { //顯示的檔案型別 if (f.isDirectory()) { return true; } //顯示滿足條件的檔案 return f.getName().endsWith(".txt") || f.getName().endsWith(".java"); } /** * 這就是顯示在開啟框中 */ public String getDescription() { return "*.txt,*.java"; } }; FileFilter filter1 = new FileFilter() { public boolean accept(File f) { if (f.isFile()) { return true; } //顯示滿足條件的檔案 return f.getName().endsWith(".xls"); } /** * 這就是顯示在開啟框中 */ public String getDescription() { return "*.xls"; } }; chooseFile.addChoosableFileFilter(filter); chooseFile.addChoosableFileFilter(filter1); int open = chooseFile.showOpenDialog(this); if (open == JFileChooser.APPROVE_OPTION) { File f = chooseFile.getSelectedFile(); Runtime runtime = Runtime.getRuntime(); try{ System.out.println(f.getAbsolutePath()); //開啟檔案 runtime.exec("rundll32 url.dll FileProtocolHandler "+f.getAbsolutePath()); }catch(Exception ex){ ex.printStackTrace(); } }
實測可用!
轉自:java 呼叫本地應用程式 Java開啟(.word,.txt,.pdf)檔案_lebron3v的專欄-CSDN部落格