Friday, February 22, 2013

Unzip zip file using java.util.zip in android


Unzip zip file using java.util.zip



Example to unzip /mnt/sdcard/test/test.zip file to /mnt/sdcard/test/unzip/ folder.

Here you see the AndroidUnZipActivity.java in src folder
package com.AndroidUnZip;
 
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
 
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.widget.Toast;
 
public class AndroidUnZipActivity extends Activity {
  
 String extStorageDirectory;
 final String testDir = "/test";
 final String unzipDir = "/unzip/";
 final String orgZipFile = "test.zip";
 String srcFile;
 String targetDir;
  
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
     
      CheckExtStorageDirectory();
      unzip();
      Toast.makeText(AndroidUnZipActivity.this,
     "Unzip finished!",
     Toast.LENGTH_LONG).show();
     
 
  }
 
  private void CheckExtStorageDirectory(){
   extStorageDirectory = Environment.getExternalStorageDirectory().toString();
   srcFile = extStorageDirectory + testDir + "/" + orgZipFile;
   targetDir = extStorageDirectory + testDir + unzipDir;
   Toast.makeText(AndroidUnZipActivity.this,
     srcFile + "\n\n" + targetDir,
     Toast.LENGTH_LONG).show(); 
    
  }
 
  private void unzip(){
    
   final int BUFFER_SIZE = 4096;
   BufferedOutputStream bufferedOutputStream = null;
      FileInputStream fileInputStream;
     
      try {
   fileInputStream = new FileInputStream(srcFile);
    
   ZipInputStream zipInputStream = new ZipInputStream(newBufferedInputStream(fileInputStream));
         ZipEntry zipEntry;
        
         while ((zipEntry = zipInputStream.getNextEntry()) != null){
          String zipEntryName = zipEntry.getName();
             File file = new File(targetDir + zipEntryName);
            
             if (file.exists()){
               
             }else{
              if(zipEntry.isDirectory()){
               file.mkdirs();
              }else{
               byte buffer[] = new byte[BUFFER_SIZE];
                
               FileOutputStream fileOutputStream = newFileOutputStream(file);
                     bufferedOutputStream
                      new BufferedOutputStream(fileOutputStream, BUFFER_SIZE);
                     int count;
                    
                     while ((count = zipInputStream.read(buffer, 0, BUFFER_SIZE)) != -1) {
                             bufferedOutputStream.write(buffer, 0, count);     
                     }
                    
                     bufferedOutputStream.flush();
                     bufferedOutputStream.close();
              }
             }
         }
         zipInputStream.close();
        
  catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  }
 
}
 
 
main.xml in res/layout folder
 

    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
  
 
 
 
 
 To create folder and save unzipped files in sdcard, AndroidManifest.xml have to be modified to add permission of "android.permission.WRITE_EXTERNAL_STORAGE".
 
xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.AndroidUnZip"
  android:versionCode="1"
  android:versionName="1.0" >
 
  <uses-sdk android:minSdkVersion="10" />
  <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 
  <application
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name" >
      <activity
          android:name=".AndroidUnZipActivity"
          android:label="@string/app_name" >
          <intent-filter>
              <action android:name="android.intent.action.MAIN" />
 
              <category android:name="android.intent.category.LAUNCHER"/>
          </intent-filter>
      </activity>
  </application>
 
</manifest>
 
 
And finally you see the output.
 
 
 
Thank you.

No comments:

Post a Comment