【问题标题】:Putting bat file inside a jar file将bat文件放入jar文件中
【发布时间】:2009-05-01 05:25:10
【问题描述】:

我有一个使用 bat 文件执行命令的 java 类。但是我在 Eclipse IDE 中开发了它。它在那里工作得很好。但是当我将它导出到一个 jar 文件中时,它找不到包含的 bat 文件。(给我一个 IOException)

eclipse中的文件结构如下 :

Project1
---->src
------>com.myproj
-------->BatFileRead.java
----md.bat
----ul.bat

md.bat 和 ul.bat 与 src 目录同级。震动后 src 文件夹消失。

有人可以帮我解决这个问题吗? 谢谢

【问题讨论】:

    标签: java eclipse batch-file


    【解决方案1】:

    为了执行命令,您必须在之后提取 bat 文件。您无法运行 jar 文件中的可执行文件。基本上,您需要将 jar 文件中的批处理文件条目作为输入流打开,并将数据复制到磁盘上的 FileOutputStream。除非它是文件系统上正确的独立文件,否则您将无法执行它。

    如果您已经在尝试提取它,那么您很可能在使用 getResourcegetResourceAsStream 时稍有错误。这很容易做到,因为这取决于您是调用ClassLoader.getResourceAsStream 还是Class.getResourceAsStream。第一个只使用绝对路径(隐式),第二个可以使用绝对或相对路径。例如,在您的情况下,您希望:

    BatFileRead.class.getResourceAsStream("/md.bat")
    

    BatFileRead.class.getClassLoader().getResourceAsStream("md.bat")
    

    您是否检查过 bat 文件肯定会在 jar 文件中结束?只需列出内容与

    jar tvf file.jar
    

    看看里面有什么。

    【讨论】:

    • 我已经检查过 bat 文件在那里。好吧,我使用 Runtime.getRuntime().exec("md.bat");在我的班级中执行 bat 文件。
    • 好吧,除非您提取它们,否则这肯定行不通。 Windows 命令外壳不理解 jar 文件。
    【解决方案2】:

    这可能非常危险。与 BAT 打交道时一定要戴上手套。他们咬人,非常痛苦。还可以尝试使用有足够大开口的罐子,尽管蝙蝠几乎可以穿过任何孔。

    祝你好运,不要在家里尝试这个。这是由专业人员完成的。

    【讨论】:

      【解决方案3】:

      尝试将file.jar 复制到file.zip,然后打开file.zip(例如,只需双击,或使用例如7-Zip)。你能在里面找到你的.bat 文件吗?如果.bat 文件不存在,您必须将.bat 文件添加到您的Eclipse 项目中,然后在Eclipse 中重新构建。如果.bat 文件在那里,但你仍然得到一个IOException 从你.java 应用程序打开它,那么请发布代码sn-p 触发IOException,并请提供file.zip 的完整列表(通过将file.zip 提取到C:\testdir 并在命令行中运行dir /s C:\testdir 来获取列表)。

      请注意 Jon Skeet 是对的,尽管可以使用 java.lang.Class.getResourceAsStreamjava.lang.ClassLoader.getResourceAsStream.jar 文件中的任何文件作为 InputStream 打开(参见 tutorial 或在 @987654322 中找到它们@),但是为了执行里面的.bat文件,你必须先解压.jar文件。

      【讨论】:

      • java.io.IOException: Cannot run program "ul.bat": CreateProcess error=2, 系统找不到 java.lang.ProcessBuilder.start(ProcessBuilder.java:459) 指定的文件在 java.lang.Runtime.exec(Runtime.java:593) 在 java.lang.Runtime.exec(Runtime.java:431) 在 java.lang.Runtime.exec(Runtime.java:328) 在 com.myproj。 BatFileRead.execute(BatFileRead.java:38) 使用它来执行bat文件:exec = Runtime.getRuntime().exec("ul.bat");
      猜你喜欢
      • 1970-01-01
      • 2012-03-20
      • 2016-09-28
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      相关资源
      最近更新 更多