如何在Java中从包装好的Jar中提取文件

如何在Java中从包装好的Jar中提取文件,java,exe,launch4j,Java,Exe,Launch4j,文件(exe)位于JAR文件中,该文件使用Launch4j包装为exe 我的可执行文件(用EXE包装的JAR文件): myProgram.exe 可执行文件位置 myProgram.exe/program.jar/resources/sub-program.exe 如何运行(或提取到临时目录)sub-program.exe并使用参数运行它sub-program.exe-f-q 如果子程序是temp中的文件,我可以按以下方式运行它: String exeLocation = System.ge

文件(exe)位于JAR文件中,该文件使用Launch4j包装为exe

我的可执行文件(用EXE包装的JAR文件):

myProgram.exe
可执行文件位置

myProgram.exe/program.jar/resources/sub-program.exe
如何运行(或提取到临时目录)sub-program.exe并使用参数运行它<代码>sub-program.exe-f-q

如果子程序是temp中的文件,我可以按以下方式运行它:

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文件中运行它。

您是否试图从Jar中以编程方式运行它?如果没有,您可以先用winzip手动解压缩它(jar基本上只是一个zip文件)


不过我应该注意到,您试图做的事情真的很奇怪。

您可以通过类似于
getClass().getResourceAsStream(“/resources/sub-program.exe”)
的方式获得类路径中资源的
InputStream
。您可以从流中读取数据,并在任意位置创建文件(例如,在您提示的temp目录下),然后执行该文件。

是的,以编程方式确定,我不希望用户看到
sub-program.exe
(因此,当需要时,它应该将其提取到临时目录中,并在过程完成后删除。好主意,你可以发布示例吗?我用非常有趣的方法从sub-program.exe获取字节,然后使用FOS编写它们,但我想有比这更好的方法。这是标准方法。可能有一些UTIL可以为您保存一些样板代码,例如使用ApacheCommons IO,
IOUtils.copy(inputStreeam,yourFos)