Android Descomprimir archivos Programáticamente en android

Estoy descargando una carpeta del cierre relámpago y ahorrar en la carpeta específica en mi dispositivo android. Mi uso no está alcanzando la carpeta como es comprimido. Me gustaría descomprimir la carpeta después de descargar desde el servidor y guardar en la carpeta específica. Y mi código está aquí va

public void DownloadDatabase(String DownloadUrl, String fileName) { try { File root = android.os.Environment.getExternalStorageDirectory(); File dir = new File(root.getAbsolutePath() + "/timy/databases"); if(dir.exists() == false){ dir.mkdirs(); } URL url = new URL("http://myexample.com/android/timy.zip"); File file = new File(dir,fileName); long startTime = System.currentTimeMillis(); Log.d("DownloadManager" , "download url:" +url); Log.d("DownloadManager" , "download file name:" + fileName); URLConnection uconn = url.openConnection(); uconn.setConnectTimeout(TIMEOUT_SOCKET); InputStream is = uconn.getInputStream(); ZipInputStream zipinstream = new ZipInputStream(new BufferedInputStream(is)); ZipEntry zipEntry; while((zipEntry = zipinstream.getNextEntry()) != null){ String zipEntryName = zipEntry.getName(); File file1 = new File(file + zipEntryName); if(file1.exists()){ }else{ if(zipEntry.isDirectory()){ file1.mkdirs(); } } } BufferedInputStream bufferinstream = new BufferedInputStream(is); ByteArrayBuffer baf = new ByteArrayBuffer(5000); int current = 0; while((current = bufferinstream.read()) != -1){ baf.append((byte) current); } FileOutputStream fos = new FileOutputStream( file); fos.write(baf.toByteArray()); fos.flush(); fos.close(); Log.d("DownloadManager" , "download ready in" + ((System.currentTimeMillis() - startTime)/1000) + "sec"); } catch(IOException e) { Log.d("DownloadManager" , "Error:" + e); e.printStackTrace(); } } 

Y mi logcat está mostrando en error. La carpeta justa está creando en mi dispositivo y ningunos archivos están descargando con descomprimido … Con hacia fuera usando el método de inputZipStream entonces Mi carpeta comprimida está descargando y ahorrando en sdcard. Cuando quiero descomprimirlo, no está sucediendo ..

¿Puede alguien ayudarme a superar el problema ..

Gracias por adelantado.

Este artículo trata sobre cómo escribir una clase de utilidad para extraer archivos y directorios en un archivo zip comprimido, utilizando la API Java integrada.

El paquete java.util.zip proporciona las siguientes clases para extraer archivos y directorios de un archivo ZIP:

ZipInputStream: es la clase principal que se puede utilizar para leer archivos zip y extraer archivos y directorios (entradas) dentro del archivo. Estos son algunos de los usos importantes de esta clase: leer un zip a través de su constructor ZipInputStream (FileInputStream) – leer las entradas de archivos y directorios a través del método getNextEntry () – leer los datos binarios de la entrada actual a través del método read (byte) Method closeEntry () – cierre el archivo zip a través del método close ()

ZipEntry: esta clase representa una entrada en el archivo zip. Cada archivo o directorio se representa como un objeto ZipEntry. Su método getName () devuelve una cadena que representa la ruta del archivo / directorio. La ruta está en la siguiente forma: folder_1 / subfolder_1 / subfolder_2 / … / subfolder_n / file.ext

Basado en la ruta de un ZipEntry, volvemos a crear la estructura de directorios al extraer el archivo zip.

Debajo de la clase se utiliza para descomprimir zip de descarga y extraer el archivo y almacenar su ubicación de deseo.

  public class UnzipUtil { private String zipFile; private String location; public UnzipUtil(String zipFile, String location) { this.zipFile = zipFile; this.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()); byte[] buffer = new byte[8192]; int len; while ((len = zin.read(buffer)) != -1) { fout.write(buffer, 0, len); } fout.close(); zin.closeEntry(); } } 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(); } } } 

MainActivity.Class:

  public class MainActivity extends Activity { private ProgressDialog mProgressDialog; String Url="http://hasmukh/hb.zip"; String unzipLocation = Environment.getExternalStorageDirectory() + "/unzipFolder/"; String StorezipFileLocation =Environment.getExternalStorageDirectory() + "/DownloadedZip"; String DirectoryName=Environment.getExternalStorageDirectory() + "/unzipFolder/files/"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); DownloadZipfile mew = new DownloadZipfile(); mew.execute(url); } //-This is method is used for Download Zip file from server and store in Desire location. class DownloadZipfile extends AsyncTask<String, String, String> { String result =""; @Override protected void onPreExecute() { super.onPreExecute(); mProgressDialog = new ProgressDialog(MainActivity.this); mProgressDialog.setMessage("Downloading..."); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mProgressDialog.setCancelable(false); mProgressDialog.show(); } @Override protected String doInBackground(String... aurl) { int count; try { URL url = new URL(aurl[0]); URLConnection conexion = url.openConnection(); conexion.connect(); int lenghtOfFile = conexion.getContentLength(); InputStream input = new BufferedInputStream(url.openStream()); OutputStream output = new FileOutputStream(StorezipFileLocation); byte data[] = new byte[1024]; long total = 0; while ((count = input.read(data)) != -1) { total += count; publishProgress(""+(int)((total*100)/lenghtOfFile)); output.write(data, 0, count); } output.close(); input.close(); result = "true"; } catch (Exception e) { result = "false"; } return null; } protected void onProgressUpdate(String... progress) { Log.d("ANDRO_ASYNC",progress[0]); mProgressDialog.setProgress(Integer.parseInt(progress[0])); } @Override protected void onPostExecute(String unused) { mProgressDialog.dismiss(); if(result.equalsIgnoreCase("true")) { try { unzip(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { } } } //This is the method for unzip file which is store your location. And unzip folder will store as per your desire location. public void unzip() throws IOException { mProgressDialog = new ProgressDialog(MainActivity.this); mProgressDialog.setMessage("Please Wait..."); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); mProgressDialog.setCancelable(false); mProgressDialog.show(); new UnZipTask().execute(StorezipFileLocation, DirectoryName); } private class UnZipTask extends AsyncTask<String, Void, Boolean> { @SuppressWarnings("rawtypes") @Override protected Boolean doInBackground(String... params) { String filePath = params[0]; String destinationPath = params[1]; File archive = new File(filePath); try { ZipFile zipfile = new ZipFile(archive); for (Enumeration e = zipfile.entries(); e.hasMoreElements();) { ZipEntry entry = (ZipEntry) e.nextElement(); unzipEntry(zipfile, entry, destinationPath); } UnzipUtil d = new UnzipUtil(StorezipFileLocation, DirectoryName); d.unzip(); } catch (Exception e) { return false; } return true; } @Override protected void onPostExecute(Boolean result) { mProgressDialog.dismiss(); } private void unzipEntry(ZipFile zipfile, ZipEntry entry,String outputDir) throws IOException { if (entry.isDirectory()) { createDir(new File(outputDir, entry.getName())); return; } File outputFile = new File(outputDir, entry.getName()); if (!outputFile.getParentFile().exists()) { createDir(outputFile.getParentFile()); } // Log.v("", "Extracting: " + entry); BufferedInputStream inputStream = new BufferedInputStream(zipfile.getInputStream(entry)); BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile)); try { } finally { outputStream.flush(); outputStream.close(); inputStream.close(); } } private void createDir(File dir) { if (dir.exists()) { return; } if (!dir.mkdirs()) { throw new RuntimeException("Can not create dir " + dir); } }} } Note: Do not forgot to add below permission in android Manifest.xml file. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" ></uses-permission> <uses-permission android:name="android.permission.INTERNET" /> 

Lee mas

  • MapView (mapas de android api v2) dentro de la distribución de fragmentos no muestra
  • No se puede implementar Parcelable porque no puedo hacer que el campo CREATOR esté estático
  • ¿Cómo recuperar datos de la base de datos de Firebase en orden descendente?
  • Cómo mostrar la selección del primer elemento en la vista de reciclador en android?
  • En evento de zoom para google maps en android
  • SwitchPreference y CheckBoxPreference en el código
  • El método getText () debe ser llamado desde el subproceso de interfaz de usuario (Android Studio)
  • Android tapa teclado suave IME
  • Android: cómo mostrar la vista previa de la cámara con devolución de llamada?
  • Envío de mayúsculas a un TextEdit durante pruebas instrumentadas
  • Android: varios appWidgets que reproducen diferentes sonidos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.