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 ();}}