[英]Get a file in a jar in jar
我有這樣的設置:
所以,我正在執行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文件。
(你為什么不把它們合並?)
我們最終使用了Maven Shade插件( http://maven.apache.org/plugins/maven-shade-plugin/ )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.