2015-12-11 3 views
0

Моя текущая задача - итерация .jar, чтобы увидеть, есть ли внутри .jars внутри. Затем я должен получить эти .jars и проверить определенный файл в каждом. Чтобы сделать это, я использую JarFile для получения JarEntries. Проблема в том, как мне сделать, чтобы снова получить JarFile из текущей записи Jar ?. Является ли это возможным?Получите JarFile от JarEntry

 
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

извлеките файл jar внутри, с помощью этого: http://stackoverflow.com/questions/1529611/how-to-write-a-java-program-which-can-extract-a-jar-file-and- store-its-data-in-s и сделать это снова –

+0

Почему бы не преобразовать его в zip, извлеките файлы там, если эти файлы являются банкой, повторите. – Bug

ответ

0

Как мне сделать, чтобы получить снова JarFile от текущей Jar Входа ?. Является ли это возможным?

Не напрямую, нет. Ваши альтернативы:

  • копия содержание записи в файл в файловой системе и использовать JarFile, чтобы открыть это, или

  • JarInputStream использовать API.

FWIW, причина того, что JarFile работает только с файлами в файловой системе является то, что его реализация является уроженцем библиотека, которая использует собственный код, чтобы открыть и прочитать исходный файл. Это было сделано так (я думаю), потому что загрузка из JAR/ZIP файлов должна работать до JVM полностью загружена. Затем API стал замороженным ... по обычным причинам.

Смежные вопросы