zarchiver descomprimir comprimir como celular archivos archivo androzip android file zip unzip

descomprimir - rar android



¿Cómo comprimir y descomprimir los archivos? (3)

Usando File lugar de la ruta del archivo String .

Esta respuesta se basa en la excelente respuesta de @ brianestey .

He modificado su método zip para aceptar una lista de archivos en lugar de rutas de archivo y un archivo zip de salida en lugar de una ruta de archivo, lo que podría ser útil para otros si de eso se trata.

public static void zip( List<File> files, File zipFile ) throws IOException { final int BUFFER_SIZE = 2048; BufferedInputStream origin = null; ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile))); try { byte data[] = new byte[BUFFER_SIZE]; for ( File file : files ) { FileInputStream fileInputStream = new FileInputStream( file ); origin = new BufferedInputStream(fileInputStream, BUFFER_SIZE); String filePath = file.getAbsolutePath(); try { ZipEntry entry = new ZipEntry( filePath.substring( filePath.lastIndexOf("/") + 1 ) ); out.putNextEntry(entry); int count; while ((count = origin.read(data, 0, BUFFER_SIZE)) != -1) { out.write(data, 0, count); } } finally { origin.close(); } } } finally { out.close(); } }

Cómo comprimir y descomprimir los archivos que ya están todos en DDMS: data/data/mypackage/files/ Necesito un ejemplo simple para eso. Ya he realizado búsquedas relacionadas con zip y descomprimir. Pero, no hay un ejemplo disponible para mí. ¿Alguien puede dar algún ejemplo? Gracias de antemano.


Eche un vistazo a las clases java.util.zip. * Para la funcionalidad zip. He hecho un código zip / unzip básico, que he pegado a continuación. Espero eso ayude.

public static void zip(String[] files, String zipFile) throws IOException { BufferedInputStream origin = null; ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile))); try { byte data[] = new byte[BUFFER_SIZE]; for (int i = 0; i < files.length; i++) { FileInputStream fi = new FileInputStream(files[i]); origin = new BufferedInputStream(fi, BUFFER_SIZE); try { ZipEntry entry = new ZipEntry(files[i].substring(files[i].lastIndexOf("/") + 1)); out.putNextEntry(entry); int count; while ((count = origin.read(data, 0, BUFFER_SIZE)) != -1) { out.write(data, 0, count); } } finally { origin.close(); } } } finally { out.close(); } } public static void unzip(String zipFile, String location) throws IOException { try { File f = new File(location); if(!f.isDirectory()) { f.mkdirs(); } ZipInputStream zin = new ZipInputStream(new FileInputStream(zipFile)); try { ZipEntry ze = null; while ((ze = zin.getNextEntry()) != null) { String path = location + ze.getName(); if (ze.isDirectory()) { File unzipFile = new File(path); if(!unzipFile.isDirectory()) { unzipFile.mkdirs(); } } else { FileOutputStream fout = new FileOutputStream(path, false); try { for (int c = zin.read(); c != -1; c = zin.read()) { fout.write(c); } zin.closeEntry(); } finally { fout.close(); } } } } finally { zin.close(); } } catch (Exception e) { Log.e(TAG, "Unzip exception", e); } }


La función zip que proporciona brianestey funciona bien, pero la función de descompresión es muy lenta debido a la lectura de un byte a la vez. Aquí hay una versión modificada de su función de descompresión que utiliza un búfer y es mucho más rápida.

/** * Unzip a zip file. Will overwrite existing files. * * @param zipFile Full path of the zip file you''d like to unzip. * @param location Full path of the directory you''d like to unzip to (will be created if it doesn''t exist). * @throws IOException */ public static void unzip(String zipFile, String location) throws IOException { int size; byte[] buffer = new byte[BUFFER_SIZE]; try { if ( !location.endsWith(File.separator) ) { location += File.separator; } File f = new File(location); if(!f.isDirectory()) { f.mkdirs(); } ZipInputStream zin = new ZipInputStream(new BufferedInputStream(new FileInputStream(zipFile), BUFFER_SIZE)); try { ZipEntry ze = null; while ((ze = zin.getNextEntry()) != null) { String path = location + ze.getName(); File unzipFile = new File(path); if (ze.isDirectory()) { if(!unzipFile.isDirectory()) { unzipFile.mkdirs(); } } else { // check for and create parent directories if they don''t exist File parentDir = unzipFile.getParentFile(); if ( null != parentDir ) { if ( !parentDir.isDirectory() ) { parentDir.mkdirs(); } } // unzip the file FileOutputStream out = new FileOutputStream(unzipFile, false); BufferedOutputStream fout = new BufferedOutputStream(out, BUFFER_SIZE); try { while ( (size = zin.read(buffer, 0, BUFFER_SIZE)) != -1 ) { fout.write(buffer, 0, size); } zin.closeEntry(); } finally { fout.flush(); fout.close(); } } } } finally { zin.close(); } } catch (Exception e) { Log.e(TAG, "Unzip exception", e); } }