我有一个使用bat文件执行命令的java类。但是我在Eclipse IDE中开发了它。它在那里工作正常。但是当我将它导出到jar文件中时,它无法找到包含的bat文件。(给我一个IOException)
eclipse中的文件结构如下 :
Project1
---->src
------>com.myproj
-------->BatFileRead.java
----md.bat
----ul.bat
md.bat和ul.bat与src目录的级别相同。震撼之后,src文件夹消失了。
有人可以帮我解决这个问题。 感谢
答案 0 :(得分:5)
为了执行命令,您必须在之后提取bat文件。您无法运行jar文件中的可执行文件。基本上,您需要将jar文件中的批处理文件条目作为输入流打开,并将数据复制到磁盘上的FileOutputStream
。在文件系统上存在适当的独立文件之前,您将无法执行它。
如果您已经尝试提取它,则可能会稍微错误地使用getResource
或getResourceAsStream
。这很容易做到,因为这取决于您是在调用ClassLoader.getResourceAsStream
还是Class.getResourceAsStream
。第一个只使用绝对路径(隐式),第二个可以使用绝对路径或相对路径。例如,在您的情况下,您需要:
BatFileRead.class.getResourceAsStream("/md.bat")
或
BatFileRead.class.getClassLoader().getResourceAsStream("md.bat")
您是否检查过bat文件肯定会在jar文件中结束?只需用
列出内容即可jar tvf file.jar
看看那里有什么。
答案 1 :(得分:1)
这可能非常危险。处理BAT时务必戴上手套。他们咬人,非常痛苦。同时尝试获得具有足够大开口的罐子,尽管蝙蝠几乎可以穿过任何一个洞。
祝你好运,不要在家里试试。这是由专业人士完成的。答案 2 :(得分:0)
尝试将file.jar
复制到file.zip
,然后打开file.zip
(例如,只需双击,或使用例如7-Zip)。你能在里面找到你的.bat
文件吗?如果.bat
文件不存在,则必须将.bat
文件添加到Eclipse项目中,然后在Eclipse中重建。如果.bat
文件存在,但您仍然从IOException
应用程序中打开了.java
,那么请发布触发IOException
的代码段,并请提供file.zip
的完整列表(通过将file.zip
解压缩到C:\testdir
并在命令行中运行dir /s C:\testdir
来获取列表。)
请注意,Jon Skeet是正确的,虽然可以使用.jar
和InputStream
以java.lang.Class.getResourceAsStream
java.lang.ClassLoader.getResourceAsStream
打开.bat
文件中的任何文件(请参阅{{ 3}}或在tutorial中找到它们,但是为了在里面执行.jar
文件,你必须先提取{{1}}文件。