Tengo una contraseña comprimida protegida con un archivo de video guardado en la tarjeta SD en el emulador de Android. Ahora quiero descomprimir ese archivo de video en una tarjeta sd a través del código. ¿Cómo puedo lograr eso? Cualquier ayuda o código? Gracias de antemanoDescomprimir un archivo comprimido en la tarjeta SD en la aplicación Android
Respuesta
import android.util.Log;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
/**
*
* @author jon
*/
public class Decompress {
private String _zipFile;
private String _location;
public Decompress(String zipFile, String location) {
_zipFile = zipFile;
_location = location;
_dirChecker("");
}
public void unzip() {
try {
FileInputStream fin = new FileInputStream(_zipFile);
ZipInputStream zin = new ZipInputStream(fin);
ZipEntry ze = null;
while ((ze = zin.getNextEntry()) != null) {
Log.v("Decompress", "Unzipping " + ze.getName());
if(ze.isDirectory()) {
_dirChecker(ze.getName());
} else {
FileOutputStream fout = new FileOutputStream(_location + ze.getName());
for (int c = zin.read(); c != -1; c = zin.read()) {
fout.write(c);
}
zin.closeEntry();
fout.close();
}
}
zin.close();
} catch(Exception e) {
Log.e("Decompress", "unzip", e);
}
}
private void _dirChecker(String dir) {
File f = new File(_location + dir);
if(!f.isDirectory()) {
f.mkdirs();
}
}
}
En su caso ::
String zipFilename = Environment.getExternalStorageDirectory() + "/files.zip";
String unzipLocation = Environment.getExternalStorageDirectory() + "/unzipped/";
Decompress d = new Decompress(zipFilename, unzipLocation);
d.unzip();
hola esta página muestra "la página no existe" –
Divyesh Gracias por su respuesta. Pero todavía estoy confundido porque mi archivo comprimido está protegido por contraseña, así que ¿cómo voy a coincidir con esa contraseña para ingresar en el archivo? –
Simplemente como un complemento a su respuesta, la lectura de entrada real y la escritura de archivo se pueden hacer en fragmentos para un rendimiento mucho más alto en lugar de byte por byte: 'byte [] buffer = new byte [4096]; for (int c = zin.read (buffer); c! = -1; c = zin.read (buffer)) { fout.write (buffer, 0, c); } ' – nobre
Esto es un poco más versión más limpia de código de Samir con el uso de Apache de IOUtils.copy()
para la copia de archivos y finally
bloque. Si tiene archivos grandes en archivo, mejor use IOUtils.copyLarge()
.
import org.apache.commons.io.IOUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class ZipUtils {
public static void unzip(InputStream is, File path) {
checkDir(path);
ZipInputStream zis = null;
FileOutputStream fos = null;
try {
zis = new ZipInputStream(is);
ZipEntry ze;
while ((ze = zis.getNextEntry()) != null) {
File entryFile = new File(path, ze.getName());
if (ze.isDirectory()) {
checkDir(entryFile);
} else {
fos = new FileOutputStream(entryFile);
IOUtils.copy(zis, fos);
fos.close();
fos = null;
}
zis.closeEntry();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (zis != null) {
try {
zis.close();
} catch (IOException ignore) {
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException ignore) {
}
}
}
}
private static void checkDir(File path) {
if (!path.exists()) {
path.mkdirs();
} else if (!path.isDirectory()) {
throw new IllegalArgumentException("Path is not directory");
}
}
}
Para desempaquetar el archivo protegido con contraseña el uso de esta biblioteca:
http://www.lingala.net/zip4j/download.php
es tan fácil.
ZipFile zipFile = new ZipFile(YourZipFile);
if(zipFile.isEncrypted())
zipFile.setPassword(Password);
zipFile.extractAll(Destination);
- 1. Compruebe si existe archivo en la tarjeta SD en Android
- 2. Servicio de reinicio para la aplicación en la tarjeta SD Cuando se repone la tarjeta SD
- 3. Android Guardar imagen en la tarjeta SD
- 4. Escribiendo un archivo en una tarjeta SD
- 5. Instalación de la aplicación para Android sin tarjeta SD
- 6. Escribiendo a la tarjeta SD
- 7. Características de la tarjeta SD Android en Samsung Galaxy
- 8. Permiso para escribir en la tarjeta SD
- 9. Eliminar una carpeta en la tarjeta SD
- 10. ¿Cómo eliminar un archivo de la tarjeta SD?
- 11. Android - eliminar archivos en la tarjeta SD al desinstalar
- 12. Almacenamiento de datos en la tarjeta SD en Android
- 13. ¿Cómo saber si la tarjeta SD está montada en Android?
- 14. Cómo guardar archivos en la tarjeta SD
- 15. ¿Cómo mostrar archivos en la tarjeta SD en un ListView?
- 16. Mover aplicaciones a la tarjeta SD
- 17. Comprobar si existe directorio en la tarjeta SD de Android
- 18. Uso de la cámara sin tarjeta SD en Android
- 19. Android ¿Cuánto espacio hay libre en la tarjeta SD?
- 20. Android: muestra la imagen de la tarjeta SD
- 21. Cómo puedo leer el archivo json de la tarjeta SD
- 22. imágenes en la tarjeta SD de acceso
- 23. ¿Cómo puedo leer un archivo de texto desde la tarjeta SD en Android?
- 24. Cómo verificar si un archivo existe en un directorio en la tarjeta SD
- 25. almacenamiento de datos de la aplicación Android en la tarjeta SD
- 26. ¿Cómo borrar los datos escritos en la tarjeta sd automáticamente al desinstalar la aplicación de Android?
- 27. No se puede mover una aplicación a la tarjeta SD
- 28. cómo obtener la ruta del archivo de la tarjeta SD en Android
- 29. Android se mueve al comportamiento de la tarjeta SD
- 30. obtener transmisión recibida cuando la tarjeta SD está desmontando android
http://www.google.com/search?q=android+unzip+file – Caner
un vistazo a ZipInputStream desde el sitio de desarrolladores de Android: http://developer.android.com/reference/java /util/zip/ZipFile.html – Seph
Esta pregunta se ha hecho muchas veces antes. Está en la biblioteca de Java en lugar de la de Android. Vea aquí: http://stackoverflow.com/questions/3382996/how-to-unzip-files-programmatically-in-android – HXCaine