java/android从网络下载zip资源

来源:互联网 发布:go web编程 pdf 完整版 编辑:程序博客网 时间:2024/05/21 21:46
package com.lapel.activity.html;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;/** *  * 从网络下载zip *  */public class DownLoaderZipFromNet extends AsyncTask<Void, Integer, Long> {private final String TAG = "DownLoaderTask";private URL mUrl;private File mFile;//private ProgressDialog mDialog;private int mProgress = 0;private ProgressReportingOutputStream mOutputStream;private Context mContext;String assetName;String path;/** *  * @param url下载文件的url * @param out *            本地保存路径 * @param assetName *            下载的文件名称+后缀 * @param context */public DownLoaderZipFromNet(String url, String out, String assetName, Context context) {super();this.assetName = assetName;this.path = out;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) {e.printStackTrace();}}//@Override//protected void onPreExecute() {//if (mDialog != null) {//mDialog.setTitle("Downloading...");//mDialog.setMessage(mFile.getName());//mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//mDialog.setOnCancelListener(new OnCancelListener() {////@Override//public void onCancel(DialogInterface dialog) {//cancel(true);//}//});//mDialog.show();//}//}@Overrideprotected Long doInBackground(Void... params) {return download();}////@Override//protected void onProgressUpdate(Integer... 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) {try {UnZipLocal.unzip(path + File.separator + assetName, path);// 从本地sd解压到本地System.out.println("下载后 解压文件");} catch (IOException e) {e.printStackTrace();}// if (mDialog != null && mDialog.isShowing()) {// mDialog.dismiss();// }// if (isCancelled())// return;}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) {e.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) {e.printStackTrace();} finally {try {out.close();} catch (IOException e) {e.printStackTrace();}try {in.close();} catch (IOException e) {e.printStackTrace();}}return count;}private final class ProgressReportingOutputStream extends FileOutputStream {public ProgressReportingOutputStream(File file) throws FileNotFoundException {super(file);}@Overridepublic void write(byte[] buffer, int byteOffset, int byteCount) throws IOException {super.write(buffer, byteOffset, byteCount);mProgress += byteCount;publishProgress(mProgress);}}}

1 0
原创粉丝点击