从JarEntry获取JarFile

时间:2015-12-11 23:18:29

标签: java file

我当前的任务是迭代一个.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
                }                       
             }              
        }

    }
}

1 个答案:

答案 0 :(得分:0)

  

如何从当前的Jar Entry中再次获取JarFile?有可能吗?

不直接,不。您的替代方案是:

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

  • 使用JarInputStream API。

FWIW,JarFile仅适用于文件系统中的文件的原因是它的实现是一个本机库,它使用本机代码打开和读取源文件。它是以这种方式完成的(我认为),因为从JAR / ZIP文件加载必须在之前完成 JVM完全自举。然后API被冻结......出于正常原因。