Aquí hay un método que puede descomprimir / descomprimir el archivo .jar y extraer archivos dentro de un directorio de destino.
Hay principalmente 2 pasos:
1) Cree todos los directorios dentro del archivo jar
2) Cree todos los archivos dentro del archivo jar
Dado que los archivos en .jar no están en un orden determinado, debemos iterar dos veces para lograr los 2 pasos.
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.Enumeration; public class UnzipJar { public static void main(String[] args) throws IOException { unzipJar("./src/dest", "./src/a.jar"); } public static void unzipJar(String destinationDir, String jarPath) throws IOException { File file = new File(jarPath); JarFile jar = new JarFile(file); // fist get all directories, // then make those directory on the destination Path for (Enumeration<JarEntry> enums = jar.entries(); enums.hasMoreElements();) { JarEntry entry = (JarEntry) enums.nextElement(); String fileName = destinationDir + File.separator + entry.getName(); File f = new File(fileName); if (fileName.endsWith("/")) { f.mkdirs(); } } //now create all files for (Enumeration<JarEntry> enums = jar.entries(); enums.hasMoreElements();) { JarEntry entry = (JarEntry) enums.nextElement(); String fileName = destinationDir + File.separator + entry.getName(); File f = new File(fileName); if (!fileName.endsWith("/")) { InputStream is = jar.getInputStream(entry); FileOutputStream fos = new FileOutputStream(f); // write contents of 'is' to 'fos' while (is.available() > 0) { fos.write(is.read()); } fos.close(); is.close(); } } } } |
Para descomprimir un archivo .zip, el enfoque es exactamente el mismo, simplemente reemplace la clase «JarFile» por «java.util.zip.ZipFile».