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

How to extract file from wrapped Jar in Java

文件 (exe) 位于 JAR 文件中,使用 Launch4j 将其包装为 EXE。

我的可执行文件(包裹在 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 文件中。

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

我应该注意到,尽管您尝试做的事情真的很奇怪。

您可以通过 getClass().getResourceAsStream("/resources/sub-program.exe") 之类的方式为类路径中的资源获取 InputStream。您可以从流中读取并在任何您喜欢的地方创建一个文件(例如,在您提示的临时目录下),然后执行它。