2017-03-01 49 views
0

文件(exe)位於JAR文件內部,該文件使用Launch4j打包到EXE中。如何從Java中包裝的Jar中提取文件

我的可執行文件(包裹在EXE JAR文件):

myProgram.exe 

可執行文件的位置

myProgram.exe/program.jar/resources/sub-program.exe 

如何運行(或解壓到臨時目錄)子的Program.exe和運行它的參數? sub-program.exe -f -q

如果子方案是臨時文件,我可以運行它:

String exeLocation = System.getProperty("java.io.tmpdir") + "sub-program.exe"; 
String params = " -f -q";  
ProcessBuilder process = new ProcessBuilder("cmd.exe", "/c", exeLocation + params); 

如何提取包裹Jar文件的文件?我想沒有辦法在包裝的Jar文件中運行它。

回答

1

對於類路徑中的資源,您可以獲得InputStream,例如getClass().getResourceAsStream("/resources/sub-program.exe")。您可以從流中讀取數據,並在您喜歡的任何位置創建文件(例如,如您所暗示的在臨時目錄下),然後執行該文件。

+0

不錯的主意,你可以發佈例子嗎?我已經通過真正有趣的方式從sub-program.exe獲取字節,然後使用FOS編寫它們,但我想有更好的辦法比這個更好。 –

+0

這是標準方法。可能有一些utils可以爲你節省一些樣板代碼,比如使用Apache Commons IO,IOUtils.copy(inputStreeam,yourFos)' –

+0

我已經使它工作了,謝謝。 –

0

你想通過編程方式從jar中運行它嗎?如果沒有,你可以事先用winzip手動解壓縮(一個jar基本上只是一個zip文件)。

我應該注意,儘管你想要做的事實非常奇怪。

+0

是的編程方式肯定,我想**不** **有用戶可見的'sub-program.exe'(所以當需要時,它應該將其提取到臨時目錄,並刪除一旦進程完成。 –