Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>This article is about how to write a utility class for extracting files and directories in a compressed zip archive, using built-in Java API.</p> <p>The java.util.zip package provides the following classes for extracting files and directories from a ZIP archive:</p> <p>ZipInputStream: this is the main class which can be used for reading zip file and extracting files and directories (entries) within the archive. Here are some important usages of this class: -read a zip via its constructor ZipInputStream(FileInputStream) -read entries of files and directories via method getNextEntry() -read binary data of current entry via method read(byte) -close current entry via method closeEntry() -close the zip file via method close()</p> <p>ZipEntry: this class represents an entry in the zip file. Each file or directory is represented as a ZipEntry object. Its method getName() returns a String which represents path of the file/directory. The path is in the following form: folder_1/subfolder_1/subfolder_2/…/subfolder_n/file.ext</p> <p>Based on the path of a ZipEntry, we re-create directory structure when extracting the zip file.</p> <p>Below class is used for unzip download zip and extract file and store your desire location.</p> <pre><code> 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(); } } } </code></pre> <blockquote> <p>MainActivity.Class:</p> </blockquote> <pre><code> 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&lt;String, String, String&gt; { 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&lt;String, Void, Boolean&gt; { @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. &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" &gt;&lt;/uses-permission&gt; &lt;uses-permission android:name="android.permission.INTERNET" /&gt; </code></pre> <p><a href="http://androidroadies.blogspot.in/2013/09/unzipping-files-with-android.html" rel="noreferrer">Read More</a></p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload