{"id":949,"date":"2023-10-24T20:25:04","date_gmt":"2023-10-25T00:55:04","guid":{"rendered":"http:\/\/gregorgonzalez.com.ve\/blog\/?p=949"},"modified":"2023-10-24T20:26:59","modified_gmt":"2023-10-25T00:56:59","slug":"descomprimir-archivos-rar-con-junrar-java","status":"publish","type":"post","link":"https:\/\/gregorgonzalez.com.ve\/blog\/descomprimir-archivos-rar-con-junrar-java\/","title":{"rendered":"Descomprimir archivos rar con Junrar &#8211; Java"},"content":{"rendered":"<p>Trabajando nuevamente con archivos comprimidos, me pidieron que buscara una forma para descomprimir archivos rar desde Java. La \u00fanica y m\u00e1s efectiva librer\u00eda que prob\u00e9 fue Junrar <a href=\"https:\/\/github.com\/junrar\/junrar\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/junrar\/junrar<\/a><\/p>\n<p>F\u00e1cil de instalar y utilizar pero hay que tener en cuenta que el algoritmo utilizado para crear archivos rar es privativo, esta librer\u00eda NO provee una forma de comprimir rar, solo sirve para descomprimir y admite las primeras 4 versiones del algoritmo, la versi\u00f3n actual es la 5 y no hay forma de que funcione con esa versi\u00f3n.<\/p>\n<h4>Ejemplo para descomprimir archivos rar proveniente de un byte[] array<\/h4>\n<pre class=\"lang:java decode:true \">  public Map&lt;String, byte[]&gt; rarToFiles(final byte[] rarFile) {\r\n    Map&lt;String, byte[]&gt; mapFiles = new HashMap&lt;&gt;();\r\n    ByteArrayInputStream bais = new ByteArrayInputStream(rarFile);\r\n\r\n    try {\r\n      \/\/Test local\r\n      \/\/FileOutputStream fos = new FileOutputStream(\"C:\/test\/archivo_descargado.rar\");\r\n      \/\/fos.write(rarFile);\r\n      \/\/fos.close();\r\n\r\n      final Archive archive = new Archive(bais);\r\n      FileHeader fileHeader;\r\n      while ((fileHeader = archive.nextFileHeader()) != null) {\r\n        ByteArrayOutputStream baos = new ByteArrayOutputStream();\r\n        archive.extractFile(fileHeader, baos);\r\n\r\n        mapFiles.put(fileHeader.getFileName(), baos.toByteArray());\r\n      }\r\n      archive.close();\r\n    } catch (java.io.IOException | RarException e) {\r\n      \/\/ Manejo de excepciones\r\n    }\r\n    return mapFiles;\r\n  }<\/pre>\n<p>&nbsp;<\/p>\n<p>Un workaround, ser\u00eda instalar en la maquina el programa winrar y desde java abrir una de consola de comandos para ejecutar las instrucciones de compresi\u00f3n y descompresi\u00f3n. Eso ser\u00eda tedioso y realizar todo un proyecto solamente para eso no es conveniente.<\/p>\n<p>Lo \u00fanico que realmente recomiendo es utilizar zip, que es un est\u00e1ndar mas universal <a href=\"http:\/\/gregorgonzalez.com.ve\/blog\/comprimir-archivos-byte-array-a-zip-y-descomprimir-zip-a-byte-array\/\">Comprimir y Descomprimir Zip con Java<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Trabajando nuevamente con archivos comprimidos, me pidieron que buscara una forma para descomprimir archivos rar desde Java. La \u00fanica y m\u00e1s efectiva librer\u00eda que prob\u00e9 fue Junrar https:\/\/github.com\/junrar\/junrar F\u00e1cil de instalar y utilizar pero hay que tener en cuenta que el algoritmo utilizado para crear archivos rar es privativo, esta librer\u00eda NO provee una forma [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":951,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[227],"tags":[361,362],"_links":{"self":[{"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/posts\/949"}],"collection":[{"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/comments?post=949"}],"version-history":[{"count":2,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/posts\/949\/revisions"}],"predecessor-version":[{"id":953,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/posts\/949\/revisions\/953"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/media\/951"}],"wp:attachment":[{"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/media?parent=949"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/categories?post=949"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/tags?post=949"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}