html5中文学习网

您的位置: 首页 > android » 正文

Android中实现下载和解压zip文件功能代码分享_Android

[ ] 已经帮助:人解决问题

本文提供了2段Android代码,实现了从Android客户端下载ZIP文件并且实现ZIP文件的解压功能,非常实用,有需要的Android开发者可以尝试一下。AvMHTML5中文学习网 - HTML5先行者学习网

下载:AvMHTML5中文学习网 - HTML5先行者学习网

DownLoaderTask.javaAvMHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
AvMHTML5中文学习网 - HTML5先行者学习网
package com.johnny.testzipanddownload;AvMHTML5中文学习网 - HTML5先行者学习网
import java.io.BufferedInputStream;AvMHTML5中文学习网 - HTML5先行者学习网
import java.io.BufferedOutputStream;AvMHTML5中文学习网 - HTML5先行者学习网
import java.io.File;AvMHTML5中文学习网 - HTML5先行者学习网
import java.io.FileNotFoundException;AvMHTML5中文学习网 - HTML5先行者学习网
import java.io.FileOutputStream;AvMHTML5中文学习网 - HTML5先行者学习网
import java.io.IOException;AvMHTML5中文学习网 - HTML5先行者学习网
import java.io.InputStream;AvMHTML5中文学习网 - HTML5先行者学习网
import java.io.OutputStream;AvMHTML5中文学习网 - HTML5先行者学习网
import java.net.MalformedURLException;AvMHTML5中文学习网 - HTML5先行者学习网
import java.net.URL;AvMHTML5中文学习网 - HTML5先行者学习网
import java.net.URLConnection;AvMHTML5中文学习网 - HTML5先行者学习网
import android.app.ProgressDialog;AvMHTML5中文学习网 - HTML5先行者学习网
import android.content.Context;AvMHTML5中文学习网 - HTML5先行者学习网
import android.content.DialogInterface;AvMHTML5中文学习网 - HTML5先行者学习网
import android.content.DialogInterface.OnCancelListener;AvMHTML5中文学习网 - HTML5先行者学习网
import android.os.AsyncTask;AvMHTML5中文学习网 - HTML5先行者学习网
import android.util.Log;AvMHTML5中文学习网 - HTML5先行者学习网
public class DownLoaderTask extends AsyncTask<Void, Integer, Long> {AvMHTML5中文学习网 - HTML5先行者学习网
 private final String TAG = "DownLoaderTask";AvMHTML5中文学习网 - HTML5先行者学习网
 private URL mUrl;AvMHTML5中文学习网 - HTML5先行者学习网
 private File mFile;AvMHTML5中文学习网 - HTML5先行者学习网
 private ProgressDialog mDialog;AvMHTML5中文学习网 - HTML5先行者学习网
 private int mProgress = 0;AvMHTML5中文学习网 - HTML5先行者学习网
 private ProgressReportingOutputStream mOutputStream;AvMHTML5中文学习网 - HTML5先行者学习网
 private Context mContext;AvMHTML5中文学习网 - HTML5先行者学习网
 public DownLoaderTask(String url,String out,Context context){AvMHTML5中文学习网 - HTML5先行者学习网
  super();AvMHTML5中文学习网 - HTML5先行者学习网
  if(context!=null){AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog = new ProgressDialog(context);AvMHTML5中文学习网 - HTML5先行者学习网
   mContext = context;AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
  else{AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog = null;AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网

  try {AvMHTML5中文学习网 - HTML5先行者学习网
   mUrl = new URL(url);AvMHTML5中文学习网 - HTML5先行者学习网
   String fileName = new File(mUrl.getFile()).getName();AvMHTML5中文学习网 - HTML5先行者学习网
   mFile = new File(out, fileName);AvMHTML5中文学习网 - HTML5先行者学习网
   Log.d(TAG, "out="+out+", name="+fileName+",mUrl.getFile()="+mUrl.getFile());AvMHTML5中文学习网 - HTML5先行者学习网
  } catch (MalformedURLException e) {AvMHTML5中文学习网 - HTML5先行者学习网
   // TODO Auto-generated catch blockAvMHTML5中文学习网 - HTML5先行者学习网
   e.printStackTrace();AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网

 }AvMHTML5中文学习网 - HTML5先行者学习网

 @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
 protected void onPreExecute() {AvMHTML5中文学习网 - HTML5先行者学习网
  // TODO Auto-generated method stubAvMHTML5中文学习网 - HTML5先行者学习网
  //super.onPreExecute();AvMHTML5中文学习网 - HTML5先行者学习网
  if(mDialog!=null){AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog.setTitle("Downloading...");AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog.setMessage(mFile.getName());AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog.setOnCancelListener(new OnCancelListener() {AvMHTML5中文学习网 - HTML5先行者学习网

    @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
    public void onCancel(DialogInterface dialog) {AvMHTML5中文学习网 - HTML5先行者学习网
     // TODO Auto-generated method stubAvMHTML5中文学习网 - HTML5先行者学习网
     cancel(true);AvMHTML5中文学习网 - HTML5先行者学习网
    }AvMHTML5中文学习网 - HTML5先行者学习网
   });AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog.show();AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网
 @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
 protected Long doInBackground(Void... params) {AvMHTML5中文学习网 - HTML5先行者学习网
  // TODO Auto-generated method stubAvMHTML5中文学习网 - HTML5先行者学习网
  return download();AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网
 @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
 protected void onProgressUpdate(Integer... values) {AvMHTML5中文学习网 - HTML5先行者学习网
  // TODO Auto-generated method stubAvMHTML5中文学习网 - HTML5先行者学习网
  //super.onProgressUpdate(values);AvMHTML5中文学习网 - HTML5先行者学习网
  if(mDialog==null)AvMHTML5中文学习网 - HTML5先行者学习网
   return;AvMHTML5中文学习网 - HTML5先行者学习网
  if(values.length>1){AvMHTML5中文学习网 - HTML5先行者学习网
   int contentLength = values[1];AvMHTML5中文学习网 - HTML5先行者学习网
   if(contentLength==-1){AvMHTML5中文学习网 - HTML5先行者学习网
    mDialog.setIndeterminate(true);AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
   else{AvMHTML5中文学习网 - HTML5先行者学习网
    mDialog.setMax(contentLength);AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
  else{AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog.setProgress(values[0].intValue());AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网
 @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
 protected void onPostExecute(Long result) {AvMHTML5中文学习网 - HTML5先行者学习网
  // TODO Auto-generated method stubAvMHTML5中文学习网 - HTML5先行者学习网
  //super.onPostExecute(result);AvMHTML5中文学习网 - HTML5先行者学习网
  if(mDialog!=null&&mDialog.isShowing()){AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog.dismiss();AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
  if(isCancelled())AvMHTML5中文学习网 - HTML5先行者学习网
   return;AvMHTML5中文学习网 - HTML5先行者学习网
  ((MainActivity)mContext).showUnzipDialog();AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网
 private long download(){AvMHTML5中文学习网 - HTML5先行者学习网
  URLConnection connection = null;AvMHTML5中文学习网 - HTML5先行者学习网
  int bytesCopied = 0;AvMHTML5中文学习网 - HTML5先行者学习网
  try {AvMHTML5中文学习网 - HTML5先行者学习网
   connection = mUrl.openConnection();AvMHTML5中文学习网 - HTML5先行者学习网
   int length = connection.getContentLength();AvMHTML5中文学习网 - HTML5先行者学习网
   if(mFile.exists()&&length == mFile.length()){AvMHTML5中文学习网 - HTML5先行者学习网
    Log.d(TAG, "file "+mFile.getName()+" already exits!!");AvMHTML5中文学习网 - HTML5先行者学习网
    return 0l;AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
   mOutputStream = new ProgressReportingOutputStream(mFile);AvMHTML5中文学习网 - HTML5先行者学习网
   publishProgress(0,length);AvMHTML5中文学习网 - HTML5先行者学习网
   bytesCopied =copy(connection.getInputStream(),mOutputStream);AvMHTML5中文学习网 - HTML5先行者学习网
   if(bytesCopied!=length&&length!=-1){AvMHTML5中文学习网 - HTML5先行者学习网
    Log.e(TAG, "Download incomplete bytesCopied="+bytesCopied+", length"+length);AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
   mOutputStream.close();AvMHTML5中文学习网 - HTML5先行者学习网
  } catch (IOException e) {AvMHTML5中文学习网 - HTML5先行者学习网
   // TODO Auto-generated catch blockAvMHTML5中文学习网 - HTML5先行者学习网
   e.printStackTrace();AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
  return bytesCopied;AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网
 private int copy(InputStream input, OutputStream output){AvMHTML5中文学习网 - HTML5先行者学习网
  byte[] buffer = new byte[1024*8];AvMHTML5中文学习网 - HTML5先行者学习网
  BufferedInputStream in = new BufferedInputStream(input, 1024*8);AvMHTML5中文学习网 - HTML5先行者学习网
  BufferedOutputStream out  = new BufferedOutputStream(output, 1024*8);AvMHTML5中文学习网 - HTML5先行者学习网
  int count =0,n=0;AvMHTML5中文学习网 - HTML5先行者学习网
  try {AvMHTML5中文学习网 - HTML5先行者学习网
   while((n=in.read(buffer, 0, 1024*8))!=-1){AvMHTML5中文学习网 - HTML5先行者学习网
    out.write(buffer, 0, n);AvMHTML5中文学习网 - HTML5先行者学习网
    count+=n;AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
   out.flush();AvMHTML5中文学习网 - HTML5先行者学习网
  } catch (IOException e) {AvMHTML5中文学习网 - HTML5先行者学习网
   // TODO Auto-generated catch blockAvMHTML5中文学习网 - HTML5先行者学习网
   e.printStackTrace();AvMHTML5中文学习网 - HTML5先行者学习网
  }finally{AvMHTML5中文学习网 - HTML5先行者学习网
   try {AvMHTML5中文学习网 - HTML5先行者学习网
    out.close();AvMHTML5中文学习网 - HTML5先行者学习网
   } catch (IOException e) {AvMHTML5中文学习网 - HTML5先行者学习网
    // TODO Auto-generated catch blockAvMHTML5中文学习网 - HTML5先行者学习网
    e.printStackTrace();AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
   try {AvMHTML5中文学习网 - HTML5先行者学习网
    in.close();AvMHTML5中文学习网 - HTML5先行者学习网
   } catch (IOException e) {AvMHTML5中文学习网 - HTML5先行者学习网
    // TODO Auto-generated catch blockAvMHTML5中文学习网 - HTML5先行者学习网
    e.printStackTrace();AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
  return count;AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网
 private final class ProgressReportingOutputStream extends FileOutputStream{AvMHTML5中文学习网 - HTML5先行者学习网
  public ProgressReportingOutputStream(File file)AvMHTML5中文学习网 - HTML5先行者学习网
    throws FileNotFoundException {AvMHTML5中文学习网 - HTML5先行者学习网
   super(file);AvMHTML5中文学习网 - HTML5先行者学习网
   // TODO Auto-generated constructor stubAvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
  @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
  public void write(byte[] buffer, int byteOffset, int byteCount)AvMHTML5中文学习网 - HTML5先行者学习网
    throws IOException {AvMHTML5中文学习网 - HTML5先行者学习网
   // TODO Auto-generated method stubAvMHTML5中文学习网 - HTML5先行者学习网
   super.write(buffer, byteOffset, byteCount);AvMHTML5中文学习网 - HTML5先行者学习网
      mProgress += byteCount;AvMHTML5中文学习网 - HTML5先行者学习网
      publishProgress(mProgress);AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网

 }AvMHTML5中文学习网 - HTML5先行者学习网
}AvMHTML5中文学习网 - HTML5先行者学习网

AvMHTML5中文学习网 - HTML5先行者学习网

解压:AvMHTML5中文学习网 - HTML5先行者学习网

ZipExtractorTask .javaAvMHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
AvMHTML5中文学习网 - HTML5先行者学习网
package com.johnny.testzipanddownload;AvMHTML5中文学习网 - HTML5先行者学习网
import java.io.BufferedInputStream;AvMHTML5中文学习网 - HTML5先行者学习网
import java.io.BufferedOutputStream;AvMHTML5中文学习网 - HTML5先行者学习网
import java.io.File;AvMHTML5中文学习网 - HTML5先行者学习网
import java.io.FileNotFoundException;AvMHTML5中文学习网 - HTML5先行者学习网
import java.io.FileOutputStream;AvMHTML5中文学习网 - HTML5先行者学习网
import java.io.IOException;AvMHTML5中文学习网 - HTML5先行者学习网
import java.io.InputStream;AvMHTML5中文学习网 - HTML5先行者学习网
import java.io.OutputStream;AvMHTML5中文学习网 - HTML5先行者学习网
import java.util.Enumeration;AvMHTML5中文学习网 - HTML5先行者学习网
import java.util.zip.ZipEntry;AvMHTML5中文学习网 - HTML5先行者学习网
import java.util.zip.ZipException;AvMHTML5中文学习网 - HTML5先行者学习网
import java.util.zip.ZipFile;AvMHTML5中文学习网 - HTML5先行者学习网
import android.app.ProgressDialog;AvMHTML5中文学习网 - HTML5先行者学习网
import android.content.Context;AvMHTML5中文学习网 - HTML5先行者学习网
import android.content.DialogInterface;AvMHTML5中文学习网 - HTML5先行者学习网
import android.content.DialogInterface.OnCancelListener;AvMHTML5中文学习网 - HTML5先行者学习网
import android.os.AsyncTask;AvMHTML5中文学习网 - HTML5先行者学习网
import android.util.Log;AvMHTML5中文学习网 - HTML5先行者学习网
public class ZipExtractorTask extends AsyncTask<Void, Integer, Long> {AvMHTML5中文学习网 - HTML5先行者学习网
 private final String TAG = "ZipExtractorTask";AvMHTML5中文学习网 - HTML5先行者学习网
 private final File mInput;AvMHTML5中文学习网 - HTML5先行者学习网
 private final File mOutput;AvMHTML5中文学习网 - HTML5先行者学习网
 private final ProgressDialog mDialog;AvMHTML5中文学习网 - HTML5先行者学习网
 private int mProgress = 0;AvMHTML5中文学习网 - HTML5先行者学习网
 private final Context mContext;AvMHTML5中文学习网 - HTML5先行者学习网
 private boolean mReplaceAll;AvMHTML5中文学习网 - HTML5先行者学习网
 public ZipExtractorTask(String in, String out, Context context, boolean replaceAll){AvMHTML5中文学习网 - HTML5先行者学习网
  super();AvMHTML5中文学习网 - HTML5先行者学习网
  mInput = new File(in);AvMHTML5中文学习网 - HTML5先行者学习网
  mOutput = new File(out);AvMHTML5中文学习网 - HTML5先行者学习网
  if(!mOutput.exists()){AvMHTML5中文学习网 - HTML5先行者学习网
   if(!mOutput.mkdirs()){AvMHTML5中文学习网 - HTML5先行者学习网
    Log.e(TAG, "Failed to make directories:"+mOutput.getAbsolutePath());AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
  if(context!=null){AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog = new ProgressDialog(context);AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
  else{AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog = null;AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
  mContext = context;AvMHTML5中文学习网 - HTML5先行者学习网
  mReplaceAll = replaceAll;AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网
 @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
 protected Long doInBackground(Void... params) {AvMHTML5中文学习网 - HTML5先行者学习网
  // TODO Auto-generated method stubAvMHTML5中文学习网 - HTML5先行者学习网
  return unzip();AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网

 @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
 protected void onPostExecute(Long result) {AvMHTML5中文学习网 - HTML5先行者学习网
  // TODO Auto-generated method stubAvMHTML5中文学习网 - HTML5先行者学习网
  //super.onPostExecute(result);AvMHTML5中文学习网 - HTML5先行者学习网
  if(mDialog!=null&&mDialog.isShowing()){AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog.dismiss();AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
  if(isCancelled())AvMHTML5中文学习网 - HTML5先行者学习网
   return;AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网
 @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
 protected void onPreExecute() {AvMHTML5中文学习网 - HTML5先行者学习网
  // TODO Auto-generated method stubAvMHTML5中文学习网 - HTML5先行者学习网
  //super.onPreExecute();AvMHTML5中文学习网 - HTML5先行者学习网
  if(mDialog!=null){AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog.setTitle("Extracting");AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog.setMessage(mInput.getName());AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog.setOnCancelListener(new OnCancelListener() {AvMHTML5中文学习网 - HTML5先行者学习网

    @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
    public void onCancel(DialogInterface dialog) {AvMHTML5中文学习网 - HTML5先行者学习网
     // TODO Auto-generated method stubAvMHTML5中文学习网 - HTML5先行者学习网
     cancel(true);AvMHTML5中文学习网 - HTML5先行者学习网
    }AvMHTML5中文学习网 - HTML5先行者学习网
   });AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog.show();AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网
 @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
 protected void onProgressUpdate(Integer... values) {AvMHTML5中文学习网 - HTML5先行者学习网
  // TODO Auto-generated method stubAvMHTML5中文学习网 - HTML5先行者学习网
  //super.onProgressUpdate(values);AvMHTML5中文学习网 - HTML5先行者学习网
  if(mDialog==null)AvMHTML5中文学习网 - HTML5先行者学习网
   return;AvMHTML5中文学习网 - HTML5先行者学习网
  if(values.length>1){AvMHTML5中文学习网 - HTML5先行者学习网
   int max=values[1];AvMHTML5中文学习网 - HTML5先行者学习网
   mDialog.setMax(max);AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
  elseAvMHTML5中文学习网 - HTML5先行者学习网
   mDialog.setProgress(values[0].intValue());AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网
 private long unzip(){AvMHTML5中文学习网 - HTML5先行者学习网
  long extractedSize = 0L;AvMHTML5中文学习网 - HTML5先行者学习网
  Enumeration<ZipEntry> entries;AvMHTML5中文学习网 - HTML5先行者学习网
  ZipFile zip = null;AvMHTML5中文学习网 - HTML5先行者学习网
  try {AvMHTML5中文学习网 - HTML5先行者学习网
   zip = new ZipFile(mInput);AvMHTML5中文学习网 - HTML5先行者学习网
   long uncompressedSize = getOriginalSize(zip);AvMHTML5中文学习网 - HTML5先行者学习网
   publishProgress(0, (int) uncompressedSize);AvMHTML5中文学习网 - HTML5先行者学习网

   entries = (Enumeration<ZipEntry>) zip.entries();AvMHTML5中文学习网 - HTML5先行者学习网
   while(entries.hasMoreElements()){AvMHTML5中文学习网 - HTML5先行者学习网
    ZipEntry entry = entries.nextElement();AvMHTML5中文学习网 - HTML5先行者学习网
    if(entry.isDirectory()){AvMHTML5中文学习网 - HTML5先行者学习网
     continue;AvMHTML5中文学习网 - HTML5先行者学习网
    }AvMHTML5中文学习网 - HTML5先行者学习网
    File destination = new File(mOutput, entry.getName());AvMHTML5中文学习网 - HTML5先行者学习网
    if(!destination.getParentFile().exists()){AvMHTML5中文学习网 - HTML5先行者学习网
     Log.e(TAG, "make="+destination.getParentFile().getAbsolutePath());AvMHTML5中文学习网 - HTML5先行者学习网
     destination.getParentFile().mkdirs();AvMHTML5中文学习网 - HTML5先行者学习网
    }AvMHTML5中文学习网 - HTML5先行者学习网
    if(destination.exists()&&mContext!=null&&!mReplaceAll){AvMHTML5中文学习网 - HTML5先行者学习网

    }AvMHTML5中文学习网 - HTML5先行者学习网
    ProgressReportingOutputStream outStream = new ProgressReportingOutputStream(destination);AvMHTML5中文学习网 - HTML5先行者学习网
    extractedSize+=copy(zip.getInputStream(entry),outStream);AvMHTML5中文学习网 - HTML5先行者学习网
    outStream.close();AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
  } catch (ZipException e) {AvMHTML5中文学习网 - HTML5先行者学习网
   // TODO Auto-generated catch blockAvMHTML5中文学习网 - HTML5先行者学习网
   e.printStackTrace();AvMHTML5中文学习网 - HTML5先行者学习网
  } catch (IOException e) {AvMHTML5中文学习网 - HTML5先行者学习网
   // TODO Auto-generated catch blockAvMHTML5中文学习网 - HTML5先行者学习网
   e.printStackTrace();AvMHTML5中文学习网 - HTML5先行者学习网
  }finally{AvMHTML5中文学习网 - HTML5先行者学习网
   try {AvMHTML5中文学习网 - HTML5先行者学习网
    zip.close();AvMHTML5中文学习网 - HTML5先行者学习网
   } catch (IOException e) {AvMHTML5中文学习网 - HTML5先行者学习网
    // TODO Auto-generated catch blockAvMHTML5中文学习网 - HTML5先行者学习网
    e.printStackTrace();AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
  return extractedSize;AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网
 private long getOriginalSize(ZipFile file){AvMHTML5中文学习网 - HTML5先行者学习网
  Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) file.entries();AvMHTML5中文学习网 - HTML5先行者学习网
  long originalSize = 0l;AvMHTML5中文学习网 - HTML5先行者学习网
  while(entries.hasMoreElements()){AvMHTML5中文学习网 - HTML5先行者学习网
   ZipEntry entry = entries.nextElement();AvMHTML5中文学习网 - HTML5先行者学习网
   if(entry.getSize()>=0){AvMHTML5中文学习网 - HTML5先行者学习网
    originalSize+=entry.getSize();AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
  return originalSize;AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网

 private int copy(InputStream input, OutputStream output){AvMHTML5中文学习网 - HTML5先行者学习网
  byte[] buffer = new byte[1024*8];AvMHTML5中文学习网 - HTML5先行者学习网
  BufferedInputStream in = new BufferedInputStream(input, 1024*8);AvMHTML5中文学习网 - HTML5先行者学习网
  BufferedOutputStream out  = new BufferedOutputStream(output, 1024*8);AvMHTML5中文学习网 - HTML5先行者学习网
  int count =0,n=0;AvMHTML5中文学习网 - HTML5先行者学习网
  try {AvMHTML5中文学习网 - HTML5先行者学习网
   while((n=in.read(buffer, 0, 1024*8))!=-1){AvMHTML5中文学习网 - HTML5先行者学习网
    out.write(buffer, 0, n);AvMHTML5中文学习网 - HTML5先行者学习网
    count+=n;AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
   out.flush();AvMHTML5中文学习网 - HTML5先行者学习网
  } catch (IOException e) {AvMHTML5中文学习网 - HTML5先行者学习网
   // TODO Auto-generated catch blockAvMHTML5中文学习网 - HTML5先行者学习网
   e.printStackTrace();AvMHTML5中文学习网 - HTML5先行者学习网
  }finally{AvMHTML5中文学习网 - HTML5先行者学习网
   try {AvMHTML5中文学习网 - HTML5先行者学习网
    out.close();AvMHTML5中文学习网 - HTML5先行者学习网
   } catch (IOException e) {AvMHTML5中文学习网 - HTML5先行者学习网
    // TODO Auto-generated catch blockAvMHTML5中文学习网 - HTML5先行者学习网
    e.printStackTrace();AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
   try {AvMHTML5中文学习网 - HTML5先行者学习网
    in.close();AvMHTML5中文学习网 - HTML5先行者学习网
   } catch (IOException e) {AvMHTML5中文学习网 - HTML5先行者学习网
    // TODO Auto-generated catch blockAvMHTML5中文学习网 - HTML5先行者学习网
    e.printStackTrace();AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
  return count;AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网

 private final class ProgressReportingOutputStream extends FileOutputStream{AvMHTML5中文学习网 - HTML5先行者学习网
  public ProgressReportingOutputStream(File file)AvMHTML5中文学习网 - HTML5先行者学习网
    throws FileNotFoundException {AvMHTML5中文学习网 - HTML5先行者学习网
   super(file);AvMHTML5中文学习网 - HTML5先行者学习网
   // TODO Auto-generated constructor stubAvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网
  @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
  public void write(byte[] buffer, int byteOffset, int byteCount)AvMHTML5中文学习网 - HTML5先行者学习网
    throws IOException {AvMHTML5中文学习网 - HTML5先行者学习网
   // TODO Auto-generated method stubAvMHTML5中文学习网 - HTML5先行者学习网
   super.write(buffer, byteOffset, byteCount);AvMHTML5中文学习网 - HTML5先行者学习网
      mProgress += byteCount;AvMHTML5中文学习网 - HTML5先行者学习网
      publishProgress(mProgress);AvMHTML5中文学习网 - HTML5先行者学习网
  }AvMHTML5中文学习网 - HTML5先行者学习网

 }AvMHTML5中文学习网 - HTML5先行者学习网
}AvMHTML5中文学习网 - HTML5先行者学习网

AvMHTML5中文学习网 - HTML5先行者学习网

Main ActivityAvMHTML5中文学习网 - HTML5先行者学习网

MainActivity.javaAvMHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
AvMHTML5中文学习网 - HTML5先行者学习网
package com.johnny.testzipanddownload;AvMHTML5中文学习网 - HTML5先行者学习网
import android.os.Bundle;AvMHTML5中文学习网 - HTML5先行者学习网
import android.os.Environment;AvMHTML5中文学习网 - HTML5先行者学习网
import android.app.Activity;AvMHTML5中文学习网 - HTML5先行者学习网
import android.app.AlertDialog;AvMHTML5中文学习网 - HTML5先行者学习网
import android.content.DialogInterface;AvMHTML5中文学习网 - HTML5先行者学习网
import android.content.DialogInterface.OnClickListener;AvMHTML5中文学习网 - HTML5先行者学习网
import android.util.Log;AvMHTML5中文学习网 - HTML5先行者学习网
import android.view.Menu;AvMHTML5中文学习网 - HTML5先行者学习网
public class MainActivity extends Activity {AvMHTML5中文学习网 - HTML5先行者学习网
 private final String TAG="MainActivity";AvMHTML5中文学习网 - HTML5先行者学习网
 @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
 protected void onCreate(Bundle savedInstanceState) {AvMHTML5中文学习网 - HTML5先行者学习网
  super.onCreate(savedInstanceState);AvMHTML5中文学习网 - HTML5先行者学习网
  setContentView(R.layout.activity_main);AvMHTML5中文学习网 - HTML5先行者学习网
  Log.d(TAG, "Environment.getExternalStorageDirectory()="+Environment.getExternalStorageDirectory());AvMHTML5中文学习网 - HTML5先行者学习网
  Log.d(TAG, "getCacheDir().getAbsolutePath()="+getCacheDir().getAbsolutePath());AvMHTML5中文学习网 - HTML5先行者学习网

  showDownLoadDialog();AvMHTML5中文学习网 - HTML5先行者学习网
  //doZipExtractorWork();AvMHTML5中文学习网 - HTML5先行者学习网
  //doDownLoadWork();AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网
 @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
 public boolean onCreateOptionsMenu(Menu menu) {AvMHTML5中文学习网 - HTML5先行者学习网
  // Inflate the menu; this adds items to the action bar if it is present.AvMHTML5中文学习网 - HTML5先行者学习网
  getMenuInflater().inflate(R.menu.main, menu);AvMHTML5中文学习网 - HTML5先行者学习网
  return true;AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网

 private void showDownLoadDialog(){AvMHTML5中文学习网 - HTML5先行者学习网
  new AlertDialog.Builder(this).setTitle("确认")AvMHTML5中文学习网 - HTML5先行者学习网
  .setMessage("是否下载?")AvMHTML5中文学习网 - HTML5先行者学习网
  .setPositiveButton("是", new OnClickListener() {AvMHTML5中文学习网 - HTML5先行者学习网

   @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
   public void onClick(DialogInterface dialog, int which) {AvMHTML5中文学习网 - HTML5先行者学习网
    // TODO Auto-generated method stubAvMHTML5中文学习网 - HTML5先行者学习网
    Log.d(TAG, "onClick 1 = "+which);AvMHTML5中文学习网 - HTML5先行者学习网
    doDownLoadWork();AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
  })AvMHTML5中文学习网 - HTML5先行者学习网
  .setNegativeButton("否", new OnClickListener() {AvMHTML5中文学习网 - HTML5先行者学习网

   @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
   public void onClick(DialogInterface dialog, int which) {AvMHTML5中文学习网 - HTML5先行者学习网
    // TODO Auto-generated method stubAvMHTML5中文学习网 - HTML5先行者学习网
    Log.d(TAG, "onClick 2 = "+which);AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
  })AvMHTML5中文学习网 - HTML5先行者学习网
  .show();AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网

 public void showUnzipDialog(){AvMHTML5中文学习网 - HTML5先行者学习网
  new AlertDialog.Builder(this).setTitle("确认")AvMHTML5中文学习网 - HTML5先行者学习网
  .setMessage("是否解压?")AvMHTML5中文学习网 - HTML5先行者学习网
  .setPositiveButton("是", new OnClickListener() {AvMHTML5中文学习网 - HTML5先行者学习网

   @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
   public void onClick(DialogInterface dialog, int which) {AvMHTML5中文学习网 - HTML5先行者学习网
    // TODO Auto-generated method stubAvMHTML5中文学习网 - HTML5先行者学习网
    Log.d(TAG, "onClick 1 = "+which);AvMHTML5中文学习网 - HTML5先行者学习网
    doZipExtractorWork();AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
  })AvMHTML5中文学习网 - HTML5先行者学习网
  .setNegativeButton("否", new OnClickListener() {AvMHTML5中文学习网 - HTML5先行者学习网

   @OverrideAvMHTML5中文学习网 - HTML5先行者学习网
   public void onClick(DialogInterface dialog, int which) {AvMHTML5中文学习网 - HTML5先行者学习网
    // TODO Auto-generated method stubAvMHTML5中文学习网 - HTML5先行者学习网
    Log.d(TAG, "onClick 2 = "+which);AvMHTML5中文学习网 - HTML5先行者学习网
   }AvMHTML5中文学习网 - HTML5先行者学习网
  })AvMHTML5中文学习网 - HTML5先行者学习网
  .show();AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网

 public void doZipExtractorWork(){AvMHTML5中文学习网 - HTML5先行者学习网
  //ZipExtractorTask task = new ZipExtractorTask("/storage/usb3/system.zip", "/storage/emulated/legacy/", this, true);AvMHTML5中文学习网 - HTML5先行者学习网
  ZipExtractorTask task = new ZipExtractorTask("/storage/emulated/legacy/testzip.zip", "/storage/emulated/legacy/", this, true);AvMHTML5中文学习网 - HTML5先行者学习网
  task.execute();AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网

 private void doDownLoadWork(){AvMHTML5中文学习网 - HTML5先行者学习网
  DownLoaderTask task = new DownLoaderTask("http://192.168.9.155/johnny/testzip.zip", "/storage/emulated/legacy/", this);AvMHTML5中文学习网 - HTML5先行者学习网
  //DownLoaderTask task = new DownLoaderTask("http://192.168.9.155/johnny/test.h264", getCacheDir().getAbsolutePath()+"/", this);AvMHTML5中文学习网 - HTML5先行者学习网
  task.execute();AvMHTML5中文学习网 - HTML5先行者学习网
 }AvMHTML5中文学习网 - HTML5先行者学习网
}AvMHTML5中文学习网 - HTML5先行者学习网

AvMHTML5中文学习网 - HTML5先行者学习网

以上就是Android实现zip文件下载和解压功能,希望对你有所帮助。AvMHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助