Android zip file download and decompression

Source: Internet
Author: User

Download:

DownLoaderTask. java

package com.johnny.testzipanddownload;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import android.app.ProgressDialog;import android.content.Context;import android.content.DialogInterface;import android.content.DialogInterface.OnCancelListener;import android.os.AsyncTask;import android.util.Log;public class DownLoaderTask extends AsyncTask
 
   {private final String TAG = "DownLoaderTask";private URL mUrl;private File mFile;private ProgressDialog mDialog;private int mProgress = 0;private ProgressReportingOutputStream mOutputStream;private Context mContext;public DownLoaderTask(String url,String out,Context context){super();if(context!=null){mDialog = new ProgressDialog(context);mContext = context;}else{mDialog = null;}try {mUrl = new URL(url);String fileName = new File(mUrl.getFile()).getName();mFile = new File(out, fileName);Log.d(TAG, "out="+out+", name="+fileName+",mUrl.getFile()="+mUrl.getFile());} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overrideprotected void onPreExecute() {// TODO Auto-generated method stub//super.onPreExecute();if(mDialog!=null){mDialog.setTitle("Downloading...");mDialog.setMessage(mFile.getName());mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);mDialog.setOnCancelListener(new OnCancelListener() {@Overridepublic void onCancel(DialogInterface dialog) {// TODO Auto-generated method stubcancel(true);}});mDialog.show();}}@Overrideprotected Long doInBackground(Void... params) {// TODO Auto-generated method stubreturn download();}@Overrideprotected void onProgressUpdate(Integer... values) {// TODO Auto-generated method stub//super.onProgressUpdate(values);if(mDialog==null)return;if(values.length>1){int contentLength = values[1];if(contentLength==-1){mDialog.setIndeterminate(true);}else{mDialog.setMax(contentLength);}}else{mDialog.setProgress(values[0].intValue());}}@Overrideprotected void onPostExecute(Long result) {// TODO Auto-generated method stub//super.onPostExecute(result);if(mDialog!=null&&mDialog.isShowing()){mDialog.dismiss();}if(isCancelled())return;((MainActivity)mContext).showUnzipDialog();}private long download(){URLConnection connection = null;int bytesCopied = 0;try {connection = mUrl.openConnection();int length = connection.getContentLength();if(mFile.exists()&&length == mFile.length()){Log.d(TAG, "file "+mFile.getName()+" already exits!!");return 0l;}mOutputStream = new ProgressReportingOutputStream(mFile);publishProgress(0,length);bytesCopied =copy(connection.getInputStream(),mOutputStream);if(bytesCopied!=length&&length!=-1){Log.e(TAG, "Download incomplete bytesCopied="+bytesCopied+", length"+length);}mOutputStream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return bytesCopied;}private int copy(InputStream input, OutputStream output){byte[] buffer = new byte[1024*8];BufferedInputStream in = new BufferedInputStream(input, 1024*8);BufferedOutputStream out  = new BufferedOutputStream(output, 1024*8);int count =0,n=0;try {while((n=in.read(buffer, 0, 1024*8))!=-1){out.write(buffer, 0, n);count+=n;}out.flush();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {out.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {in.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return count;}private final class ProgressReportingOutputStream extends FileOutputStream{public ProgressReportingOutputStream(File file)throws FileNotFoundException {super(file);// TODO Auto-generated constructor stub}@Overridepublic void write(byte[] buffer, int byteOffset, int byteCount)throws IOException {// TODO Auto-generated method stubsuper.write(buffer, byteOffset, byteCount);    mProgress += byteCount;    publishProgress(mProgress);}}}
 

Decompress: ZipExtractorTask. java

package com.johnny.testzipanddownload;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Enumeration;import java.util.zip.ZipEntry;import java.util.zip.ZipException;import java.util.zip.ZipFile;import android.app.ProgressDialog;import android.content.Context;import android.content.DialogInterface;import android.content.DialogInterface.OnCancelListener;import android.os.AsyncTask;import android.util.Log;public class ZipExtractorTask extends AsyncTask
 
   {private final String TAG = "ZipExtractorTask";private final File mInput;private final File mOutput;private final ProgressDialog mDialog;private int mProgress = 0;private final Context mContext;private boolean mReplaceAll;public ZipExtractorTask(String in, String out, Context context, boolean replaceAll){super();mInput = new File(in);mOutput = new File(out);if(!mOutput.exists()){if(!mOutput.mkdirs()){Log.e(TAG, "Failed to make directories:"+mOutput.getAbsolutePath());}}if(context!=null){mDialog = new ProgressDialog(context);}else{mDialog = null;}mContext = context;mReplaceAll = replaceAll;}@Overrideprotected Long doInBackground(Void... params) {// TODO Auto-generated method stubreturn unzip();}@Overrideprotected void onPostExecute(Long result) {// TODO Auto-generated method stub//super.onPostExecute(result);if(mDialog!=null&&mDialog.isShowing()){mDialog.dismiss();}if(isCancelled())return;}@Overrideprotected void onPreExecute() {// TODO Auto-generated method stub//super.onPreExecute();if(mDialog!=null){mDialog.setTitle("Extracting");mDialog.setMessage(mInput.getName());mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);mDialog.setOnCancelListener(new OnCancelListener() {@Overridepublic void onCancel(DialogInterface dialog) {// TODO Auto-generated method stubcancel(true);}});mDialog.show();}}@Overrideprotected void onProgressUpdate(Integer... values) {// TODO Auto-generated method stub//super.onProgressUpdate(values);if(mDialog==null)return;if(values.length>1){int max=values[1];mDialog.setMax(max);}elsemDialog.setProgress(values[0].intValue());}private long unzip(){long extractedSize = 0L;Enumeration
  
    entries;ZipFile zip = null;try {zip = new ZipFile(mInput);long uncompressedSize = getOriginalSize(zip);publishProgress(0, (int) uncompressedSize);entries = (Enumeration
   
    ) zip.entries();while(entries.hasMoreElements()){ZipEntry entry = entries.nextElement();if(entry.isDirectory()){continue;}File destination = new File(mOutput, entry.getName());if(!destination.getParentFile().exists()){Log.e(TAG, "make="+destination.getParentFile().getAbsolutePath());destination.getParentFile().mkdirs();}if(destination.exists()&&mContext!=null&&!mReplaceAll){}ProgressReportingOutputStream outStream = new ProgressReportingOutputStream(destination);extractedSize+=copy(zip.getInputStream(entry),outStream);outStream.close();}} catch (ZipException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {zip.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return extractedSize;}private long getOriginalSize(ZipFile file){Enumeration
    
      entries = (Enumeration
     
      ) file.entries();long originalSize = 0l;while(entries.hasMoreElements()){ZipEntry entry = entries.nextElement();if(entry.getSize()>=0){originalSize+=entry.getSize();}}return originalSize;}private int copy(InputStream input, OutputStream output){byte[] buffer = new byte[1024*8];BufferedInputStream in = new BufferedInputStream(input, 1024*8);BufferedOutputStream out  = new BufferedOutputStream(output, 1024*8);int count =0,n=0;try {while((n=in.read(buffer, 0, 1024*8))!=-1){out.write(buffer, 0, n);count+=n;}out.flush();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {out.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {in.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return count;}private final class ProgressReportingOutputStream extends FileOutputStream{public ProgressReportingOutputStream(File file)throws FileNotFoundException {super(file);// TODO Auto-generated constructor stub}@Overridepublic void write(byte[] buffer, int byteOffset, int byteCount)throws IOException {// TODO Auto-generated method stubsuper.write(buffer, byteOffset, byteCount);    mProgress += byteCount;    publishProgress(mProgress);}}}
     
    
   
  
 


Main ActivityMainActivity. java

Package com. johnny. testzipanddownload; import android. OS. bundle; import android. OS. environment; import android. app. activity; import android. app. alertDialog; import android. content. dialogInterface; import android. content. dialogInterface. onClickListener; import android. util. log; import android. view. menu; public class MainActivity extends Activity {private final String TAG = "MainActivity"; @ Overrideprotected voi D onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (R. layout. activity_main); Log. d (TAG, "Environment. getExternalStorageDirectory () = "+ Environment. getExternalStorageDirectory (); Log. d (TAG, "getCacheDir (). getAbsolutePath () = "+ getCacheDir (). getAbsolutePath (); showDownLoadDialog (); // doZipExtractorWork (); // doDownLoadWork () ;}@ Overridepublic boolean onCreateOptionsMenu (M Enu menu) {// Inflate the menu; this adds items to the action bar if it is present. getMenuInflater (). inflate (R. menu. main, menu); return true;} private void showDownLoadDialog () {new AlertDialog. builder (this ). setTitle ("OK "). setMessage ("download? "). SetPositiveButton ("yes", new OnClickListener () {@ Overridepublic void onClick (DialogInterface dialog, int which) {// TODO Auto-generated method stubLog. d (TAG, "onClick 1 =" + which); doDownLoadWork ();}}). setNegativeButton ("no", new OnClickListener () {@ Overridepublic void onClick (DialogInterface dialog, int which) {// TODO Auto-generated method stubLog. d (TAG, "onClick 2 =" + which );}}). show ();} public vo Id showUnzipDialog () {new AlertDialog. Builder (this). setTitle ("OK"). setMessage ("Do You Want to decompress? "). SetPositiveButton ("yes", new OnClickListener () {@ Overridepublic void onClick (DialogInterface dialog, int which) {// TODO Auto-generated method stubLog. d (TAG, "onClick 1 =" + which); doZipExtractorWork ();}}). setNegativeButton ("no", new OnClickListener () {@ Overridepublic void onClick (DialogInterface dialog, int which) {// TODO Auto-generated method stubLog. d (TAG, "onClick 2 =" + which );}}). show ();} public void doZipExtractorWork () {// ZipExtractorTask task = new ZipExtractorTask ("/storage/usb3/system.zip", "/storage/emulated/legacy/", this, true); ZipExtractorTask task = new ZipExtractorTask ("/storage/emulated/legacy/testzip.zip", "/storage/emulated/legacy/", this, trueappstask.exe cute ();} private void doDownLoadWork () {DownLoaderTask task = new DownLoaderTask ("http: // 192.168.9.155/johnny/testzip.zip", "/storage/emulated/legacy/", this ); // DownLoaderTask task = new DownLoaderTask ("http: // 192.168.9.155/johnny/test. h264 ", getCacheDir (). getAbsolutePath () + "/", this);task.exe cute ();}}


Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.