2017-03-01 2 views
0

ファイル(exe)はJARファイル内にあり、Launch4jを使用してEXEにラップされています。JavaでラップされたJarからファイルを抽出する方法

私の実行ファイル(EXEに包まれたJARファイル):

myProgram.exe 

実行可能ファイルの場所

サブPROGRAM.EXEを実行する(または一時ディレクトリに解凍)する方法
myProgram.exe/program.jar/resources/sub-program.exe 

とパラメータで実行しますか?包まれたJarファイルからファイルを抽出する方法

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

:サブプログラムが一時にファイルだった場合sub-program.exe -f -q

、私はそれを実行するだろうか?私はラップされたJARファイルの中でそれを実行する方法がないと思います。

答えて

1

getClass().getResourceAsStream("/resources/sub-program.exe")のように、クラスパス内のリソースに対してInputStreamを取得できます。ストリームから読み込んで、好きな場所(たとえば、ヒントのように一時ディレクトリの下)にファイルを作成して実行することができます。

+0

私は本当に面白い方法でSub-Program.exeからバイトを取得してからFOSを使って書きましたが、これよりも良い方法があると思います。 –

+0

これは標準的な方法です。 Apache Commons IOを使用するようないくつかの定型コードを保存できるユーティリティがいくつかあります。「IOUtils.copy(inputStreeam、yourFos)」 –

+0

私はそれを動作させました。ありがとうございます。 –

0

プログラム内でjarファイル内から実行しようとしていますか?そうでない場合は、あらかじめwinzip(jarファイルは基本的にはzipファイル)で手動で解凍できます。

あなたがしようとしていることは本当に奇妙なことですが、注意する必要があります。

+0

はい、私は** not **を 'sub-program.exe'をユーザに見せたいと思っています(そうすれば、一時ディレクトリにそれを抽出し、プロセスが完了したら削除する必要があります)。 –

関連する問題