Java 从JarEntry获取JarFile

Java 从JarEntry获取JarFile,java,file,Java,File,我当前的任务是迭代一个.jar,看看里面是否有.jar。然后我必须获取这些.jar并检查每个文件中的特定文件。为此,我使用JarFile获取jar条目。问题是,如何从当前Jar条目中再次获取JarFile?。可能吗 Jar: Jar1: /META-INF/source/file1.txt Jar2: /META-INF/source/file1.txt 罐子: Jar1: /META-INF/source/file1.txt Jar2: /META-INF/source

我当前的任务是迭代一个.jar,看看里面是否有.jar。然后我必须获取这些.jar并检查每个文件中的特定文件。为此,我使用JarFile获取jar条目。问题是,如何从当前Jar条目中再次获取JarFile?。可能吗

Jar: Jar1: /META-INF/source/file1.txt Jar2: /META-INF/source/file1.txt 罐子: 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
                }                       
             }              
        }

    }
}
publicstaticvoidmain(字符串[]args)抛出IOException、URISyntaxException{
String dir=path.get(“.”).toAbsolutionPath().normalize().toString()+“/target”;
Collection jarBuildList=JarFinder.getJars(dir);
for(字符串buildJar:jarBuildList){
File File=新文件(buildJar);
JarFile buildJarFile=新的JarFile(文件);
枚举条目=buildJarFile.entries();
while(entries.hasMoreElements()){
JarEntry JarEntry=entries.nextElement();
if(jarEntry.getName().contains(“.jar”)){
//有了JarEntry,输入该JarJavaEntry并获取file1.txt
}                       
}              
}
}
}
如何从当前Jar条目中再次获取Jar文件?。可能吗

Jar: Jar1: /META-INF/source/file1.txt Jar2: /META-INF/source/file1.txt 不是直接的,不是。你的备选方案是:

  • 将条目内容复制到文件系统中的文件中,并使用
    JarFile
    打开该文件,或

  • 使用
    JarInputStream
    API


FWIW,
JarFile
只对文件系统中的文件起作用的原因是它的实现是一个本机库,它使用本机代码打开和读取源文件。我认为是这样做的,因为从JAR/ZIP文件加载必须在JVM完全引导之前工作。然后API冻结了。。。出于正常原因。

提取其中的jar文件,如下所示:并再次执行。为什么不将其转换为zip,提取其中的文件,如果这些文件是jar,请重复。