Trabajando nuevamente con archivos comprimidos, me pidieron que buscara una forma para descomprimir archivos rar desde Java. La única y más efectiva librería que probé fue Junrar https://github.com/junrar/junrar
Fácil de instalar y utilizar pero hay que tener en cuenta que el algoritmo utilizado para crear archivos rar es privativo, esta librería NO provee una forma de comprimir rar, solo sirve para descomprimir y admite las primeras 4 versiones del algoritmo, la versión actual es la 5 y no hay forma de que funcione con esa versión.
Ejemplo para descomprimir archivos rar proveniente de un byte[] array
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
public Map<String, byte[]> rarToFiles(final byte[] rarFile) { Map<String, byte[]> mapFiles = new HashMap<>(); ByteArrayInputStream bais = new ByteArrayInputStream(rarFile); try { //Test local //FileOutputStream fos = new FileOutputStream("C:/test/archivo_descargado.rar"); //fos.write(rarFile); //fos.close(); final Archive archive = new Archive(bais); FileHeader fileHeader; while ((fileHeader = archive.nextFileHeader()) != null) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); archive.extractFile(fileHeader, baos); mapFiles.put(fileHeader.getFileName(), baos.toByteArray()); } archive.close(); } catch (java.io.IOException | RarException e) { // Manejo de excepciones } return mapFiles; } |
Un workaround, sería instalar en la maquina el programa winrar y desde java abrir una de consola de comandos para ejecutar las instrucciones de compresión y descompresión. Eso sería tedioso y realizar todo un proyecto solamente para eso no es conveniente.
Lo único que realmente recomiendo es utilizar zip, que es un estándar mas universal Comprimir y Descomprimir Zip con Java