Java 尝试访问jar中的ZipFile时发生FileNotFoundException
我想在Java中打开一个ZipFile,在从eclipse导出项目后,它位于.jar中。这是我写的代码: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
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)
进行随机访问。