Lectura de archivos desde un archivo ZIP en su carpeta de activos de Android
Estoy leyendo archivos de un archivo ZIP que se encuentra en mi carpeta de activos de Android usando ZipInputStream
: funciona, pero es muy lento, ya que tiene que leer secuencialmente usando getNextEntry()
, y hay bastantes archivos.
Si copio el archivo ZIP en la tarjeta SD, leer es muy rápido al usar ZipFile.getEntry
, pero no encontré una manera de usar ZipFile
con el archivo de activos!
- ¿Cómo puedo transferir un dispositivo de prueba de base de datos al dispositivo desde mi aplicación de prueba de unidad
- Seguridad de la carpeta de activos de Android
- Copiando toda la carpeta con su contenido de los activos a los archivos internos de la aplicación /
- ¿Cómo hacer referencia a los "activos" de Android a través de paquetes?
- Android Cómo leer un recurso desde fuera de la actividad principal
¿Hay alguna manera de acceder a la ZIP en la carpeta de activos de una manera rápida? ¿O debo realmente copiar el ZIP a la tarjeta SD?
(BTW, en caso de que alguien se pregunte por qué estoy haciendo esto: la aplicación es más grande de 50 MB, por lo que para conseguirlo en la Play Store tengo que usar Expansión APKs, sin embargo, como esta aplicación también debe ser puesto en la Amazon App Store, tengo que usar otra versión para esto, como Amazon no soporta expansión APKs, naturalmente … Pensé que el acceso a un archivo ZIP en dos lugares diferentes sería una manera fácil de manejar esto, pero por desgracia .. .)
- Android google signin y facebook inicio de sesión botón de mirar completamente diferente
- Lista de archivos en la carpeta de activos y sus subcarpetas
- Cómo proteger la carpeta de activos de Android de los hackers
- Activos de Android sin contexto
- Creación de activos de imagen en Android Studio
- AndroidPDFViewer - No se puede abrir el documento pdf en mi aplicación
- Android obtener Bitmap o sonido de los activos
- Lectura de PDF desde la carpeta de activos usando PDFViewer.jar
Esto funciona para mí:
private void loadzip(String folder, InputStream inputStream) throws IOException { ZipInputStream zipIs = new ZipInputStream(inputStream); ZipEntry ze = null; while ((ze = zipIs.getNextEntry()) != null) { FileOutputStream fout = new FileOutputStream(folder +"/"+ ze.getName()); byte[] buffer = new byte[1024]; int length = 0; while ((length = zipIs.read(buffer))>0) { fout.write(buffer, 0, length); } zipIs.closeEntry(); fout.close(); } zipIs.close(); }
Puede crear un ZipInputStream de la siguiente manera:
ZipInputStream zipIs = new ZipInputStream(context.getResources().openRawResource(your.package.com.R.raw.filename)); ZipEntry ze = null; while ((ze = zipIs.getNextEntry()) != null) { FileOutputStream fout = new FileOutputStream(FOLDER_NAME +"/"+ ze.getName()); byte[] buffer = new byte[1024]; int length = 0; while ((length = zipIs.read(buffer))>0) { fout.write(buffer, 0, length); } zipIs .closeEntry(); fout.close(); } zipIs .close();
Puede almacenar los archivos sin comprimir directamente en los activos (es decir, descomprimir el archivo zip en los elementos / carpeta). De esta forma, puede acceder a los archivos directamente y se comprimirán de todos modos al construir el APK.
- No se pudo resolver: junit: junit: 4.12 en android studio 1.4 en ubuntu
- Android Throwing OutOfMemoryError "Error al asignar una asignación de 164 bytes con 44 bytes libres y 44B hasta OOM" (caso recursivo)