usar que los librerias jars incluir generan externas ejemplos ejecutar ejecutables desde crea como clase archivos api jar java

api - que - incluir librerias externas en un jar



¿Lectura de contenido de un archivo JAR(en tiempo de ejecución)? (3)

Esta pregunta ya tiene una respuesta aquí:

He leído las publicaciones:

Visualización de contenidos de un archivo .jar
y
¿Cómo hago una lista de los archivos dentro de un archivo JAR?

Pero, lamentablemente, no pude encontrar una buena solución para leer el contenido de un JAR (archivo por archivo).

Además, ¿alguien podría darme una pista, o señalar a un recurso, donde se discute mi problema?

Solo puedo pensar en una manera no tan directa de hacer esto:
De alguna manera, pude convertir la lista de recursos de un JAR en una lista de URL de JAR interno, que luego pude abrir usando openConnection ().


Aquí es cómo lo leo como un archivo ZIP,

try { ZipInputStream is = new ZipInputStream(new FileInptuStream("file.jar")); ZipEntry ze; byte[] buf = new byte[4096]; int len; while ((ze = is.getNextEntry()) != null) { System.out.println("----------- " + ze); len = ze.getSize(); // Dump len bytes to the file ... } is.close(); } catch (Exception e) { e.printStackTrace(); }

Esto es más eficiente que el enfoque JarFile si desea descomprimir todo el archivo.


Aquí está el código completo que lee todos los contenidos del archivo dentro del archivo jar.

public class ListJar { private static void process(InputStream input) throws IOException { InputStreamReader isr = new InputStreamReader(input); BufferedReader reader = new BufferedReader(isr); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); } public static void main(String arg[]) throws IOException { JarFile jarFile = new JarFile("/home/bathakarai/gold/click-0.15.jar"); final Enumeration<JarEntry> entries = jarFile.entries(); while (entries.hasMoreElements()) { final JarEntry entry = entries.nextElement(); if (entry.getName().contains(".")) { System.out.println("File : " + entry.getName()); JarEntry fileEntry = jarFile.getJarEntry(entry.getName()); InputStream input = jarFile.getInputStream(fileEntry); process(input); } } } }


Utiliza JarFile para abrir un archivo Jar. Con él puede obtener ZipEntry o JarEntry (pueden verse como lo mismo) al usar ''getEntry (String name)'' o ''entires''. Una vez que obtiene una Entrada, puede usarla para obtener InputStream llamando a '' JarFile.getInputStream (ZipEntry ze) ''. Bueno, puedes leer datos de la transmisión.

Vea un tutorial aquí .