【问题标题】:How to extract file from wrapped Jar in Java如何从Java中的包装Jar中提取文件
【发布时间】:2017-03-01 21:46:35
【问题描述】:

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

【问题讨论】:

    标签: java exe launch4j


    【解决方案1】:

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

    【讨论】:

    • 好主意,你能发布例子吗?我已经通过非常有趣的方式从 sub-program.exe 中获取字节,然后使用 FOS 编写它们,但我想还有比这更好的方法。
    • 这是标准方式。可能有一些实用程序可以为您节省一些样板代码,例如使用 Apache Commons IO,IOUtils.copy(inputStreeam, yourFos)
    【解决方案2】:

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

    我应该注意到,你正在尝试做的事情真的很奇怪。

    【讨论】:

    • 是的,以编程方式确定,我希望 notsub-program.exe 对用户可见(因此,在需要时,它应该将其解压缩到临时目录,并在处理过程中删除完成了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    相关资源
    最近更新 更多