Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试访问jar中的ZipFile时发生FileNotFoundException_Java_File_Jar_Zip - Fatal编程技术网

Java 尝试访问jar中的ZipFile时发生FileNotFoundException

Java 尝试访问jar中的ZipFile时发生FileNotFoundException,java,file,jar,zip,Java,File,Jar,Zip,我想在Java中打开一个ZipFile,在从eclipse导出项目后,它位于.jar中。这是我写的代码: String modpath = "/ModByDNSYeti.zip"; URL url = this.getClass().getResource(modpath); ZipFile newTextures = new ZipFile(url.toString()); 如果我执行jar,我会得到一个 FileNotFoundException:文件:“路径” 其中“路径”是ZipFi

我想在Java中打开一个ZipFile,在从eclipse导出项目后,它位于.jar中。这是我写的代码:

String modpath = "/ModByDNSYeti.zip";
URL url = this.getClass().getResource(modpath);

ZipFile newTextures = new ZipFile(url.toString());
如果我执行jar,我会得到一个

FileNotFoundException:文件:“路径”

其中“路径”是ZipFile所在的确切路径。它就在那里。到现在为止,我已经检查了一百次了,但我不知道该怎么办。从Eclipse启动程序时,我会遇到同样的错误。谷歌也没有把我带到任何地方

问候
DNSYeti

您试图以文件的形式访问资源,但这不起作用-这就是为什么会出现FileNotFound异常。您可以将资源作为流抓取并使用它创建ZipInputStream:

ZipInputStream zipInStream = new ZipInputStream(this.getClass().getResourceAsStream(modpath));

然后,您可以使用ZipInputStream读取ZIP文件。

谢谢您的回答,但我有一个后续问题:在该方法的其余部分中,两个ZipFile合并到一个ZipOutStream。我可以简单地用ZipInputStream替换其中一个ZipFile,但这会导致另一个问题:我希望ZipInputStream覆盖ZipFile放入ZipOutStream的任何入口。由于我实际上无法删除ZipOutStream中的任何项目,因此我必须检查覆盖的ZipFile是否包含该文件,如果包含,则不要让被覆盖的ZipFile将其作为条目放入流中。当覆盖文件是ZipInputStream时,这不起作用。如果您需要随机访问zip,ZipInputStream确实没有多大帮助。在这种情况下,您可能会考虑不要将.zip文件放入.jar文件中,而是将它们放到.jar本身旁边。或者,您可以将.jar中的.zips复制到临时文件中,然后使用
ZipFile(String)
进行随机访问。