gpt4 book ai didi

java - 在 jar 中的 jar 中获取文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:25:26 26 4
gpt4 key购买 nike

我有这样的设置:

  • outer.jar
    • inner.jar
      • 文件.txt

所以,我正在执行 outer.jar 并在它的主类中:

URL url = Main.class.getClassLoader().getResource("file.txt");

url 是:'jar:file:outer.jar!/inner.jar!/file.txt'

但如果我尝试这样阅读它:

url.openStream()

我得到一个异常

Exception in thread "main" java.io.FileNotFoundException: JAR entry inner.jar!/file.txt not found in outer.jar
at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:142)
at sun.net.www.protocol.jar.JarURLConnection.getInputStream(JarURLConnection.java:150)
at java.net.URL.openStream(URL.java:1038)
at Main.main(Main.java:15)

文件肯定在那里。 JarURLConnection 不可能做到这一点吗?

最佳答案

Jar 文件只是具有其他名称的 Zip 文件的简单版本,因此只需将它们视为 zip 文件即可:

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;


public class Main{

public static void main(String[] args) throws IOException {
URL url = Main.class.getResource("file.jar");
ZipFile zipFile = new ZipFile(url.getFile());
Enumeration<? extends ZipEntry> entries = zipFile.entries();
while(entries.hasMoreElements()){
ZipEntry entry = entries.nextElement();
//InputStream stream = zipFile.getInputStream(entry); <- to handle the file
//print the names of the files inside the Jar
System.out.println(entry.getName());
}
}

}

注意:这似乎是一个设计问题,因为不建议使用嵌套的 jar 文件。

(你为什么不合并它们?)

关于java - 在 jar 中的 jar 中获取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25002230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com