Java 将bat文件放入jar文件中

Java 将bat文件放入jar文件中,java,eclipse,batch-file,Java,Eclipse,Batch File,我有一个java类,它使用bat文件执行命令。但是我在EclipseIDE中开发了它。它在那里工作得很好。但当我将其导出到jar文件中时,它找不到包含的bat文件 eclipse中的文件结构如下 : md.bat和ul.bat与src目录的级别相同。震动后,src文件夹消失 有人能帮我吗。 谢谢为了执行命令,您必须在之后提取bat文件。不能运行jar文件中的可执行文件。基本上,您需要将jar文件中的批处理文件条目作为输入流打开,并将数据复制到磁盘上的FileOutputStream。在它成为文件

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

eclipse中的文件结构如下 :

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

有人能帮我吗。
谢谢

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

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

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

你有没有检查过bat文件最终肯定会出现在jar文件中?只需将内容与

jar tvf file.jar

要查看其中的内容。

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

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

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

你有没有检查过bat文件最终肯定会出现在jar文件中?只需将内容与

jar tvf file.jar

查看其中的内容。

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


请注意,Jon Skeet是对的,尽管可以使用
java.lang.Class.getResourceAsStream
java.lang.ClassLoader.getResourceAsStream
.jar
文件中的任何文件作为
InputStream
打开(请参阅或在中找到),但要执行内部的
.bat
文件,必须先解压缩
.jar
文件。

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


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

这可能非常危险。处理蝙蝠时一定要戴手套。它们会咬人,而且非常痛苦。也要试着取一个开口足够大的罐子,尽管蝙蝠几乎可以穿过任何孔


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

这可能非常危险。处理蝙蝠时一定要戴手套。它们会咬人,而且非常痛苦。另外,也可以尝试使用开口足够大的罐子,尽管蝙蝠几乎可以穿过任何孔


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

我已经检查过了,bat文件在那里。我使用Runtime.getRuntime().exec(“md.bat”);在我的类中执行bat文件。除非您提取它们,否则这肯定不会起作用。Windows命令shell不理解jar文件。我已经检查过了,bat文件在那里。我使用Runtime.getRuntime().exec(“md.bat”);在我的类中执行bat文件。除非提取它们,否则这肯定不会起作用。Windows命令shell不理解jar文件。java.io.IOException:无法运行程序“ul.bat”:CreateProcess error=2,系统无法找到在java.lang.Pr处指定的文件