我当前的任务是迭代一个.jar,看它里面是否有.jars。然后我必须得到那些.jars并检查每个文件中的某个文件。为此,我使用JarFile来获取JarEntries。问题是,如何从当前的Jar Entry中再次获取JarFile?有可能吗?
Jar: Jar1: /META-INF/source/file1.txt Jar2: /META-INF/source/file1.txt
这是我目前的代码:
public static void main(String[] args) throws IOException, URISyntaxException {
String dir = Paths.get(".").toAbsolutePath().normalize().toString() + "/target";
Collection<String> jarBuildList = JarFinder.getJars(dir);
for(String buildJar : jarBuildList){
File file = new File(buildJar);
JarFile buildJarFile = new JarFile(file);
Enumeration<JarEntry> entries = buildJarFile.entries();
while (entries.hasMoreElements()) {
JarEntry jarEntry = entries.nextElement();
if (jarEntry.getName().contains(".jar")){
//Having the JarEntry, enter to that jar javaEntry and get a file1.txt
}
}
}
}
}
答案 0 :(得分:0)
如何从当前的Jar Entry中再次获取JarFile?有可能吗?
不直接,不。您的替代方案是:
将条目的内容复制到文件系统中的文件,然后使用JarFile
打开该文件,或
使用JarInputStream
API。
FWIW,JarFile
仅适用于文件系统中的文件的原因是它的实现是一个本机库,它使用本机代码打开和读取源文件。它是以这种方式完成的(我认为),因为从JAR / ZIP文件加载必须在之前完成 JVM完全自举。然后API被冻结......出于正常原因。