转载:http://blog.csdn.net/hopehe888999/article/details/19035373

    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<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;          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 block                  e.printStackTrace();              }                        }                    @Override          protected 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() {                                            @Override                      public void onCancel(DialogInterface dialog) {                          // TODO Auto-generated method stub                          cancel(true);                      }                  });                  mDialog.show();              }          }                @Override          protected Long doInBackground(Void... params) {              // TODO Auto-generated method stub              return download();          }                @Override          protected 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());              }          }                @Override          protected 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 block                  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) {                  // TODO Auto-generated catch block                  e.printStackTrace();              }finally{                  try {                      out.close();                  } catch (IOException e) {                      // TODO Auto-generated catch block                      e.printStackTrace();                  }                  try {                      in.close();                  } catch (IOException e) {                      // TODO Auto-generated catch block                      e.printStackTrace();                  }              }              return count;          }          private final class ProgressReportingOutputStream extends FileOutputStream{                    public ProgressReportingOutputStream(File file)                      throws FileNotFoundException {                  super(file);                  // TODO Auto-generated constructor stub              }                    @Override              public void write(byte[] buffer, int byteOffset, int byteCount)                      throws IOException {                  // TODO Auto-generated method stub                  super.write(buffer, byteOffset, byteCount);                  mProgress += byteCount;                  publishProgress(mProgress);              }                        }      }  




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<Void, Integer, Long> {          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;          }          @Override          protected Long doInBackground(Void... params) {              // TODO Auto-generated method stub              return unzip();          }                    @Override          protected void onPostExecute(Long result) {              // TODO Auto-generated method stub              //super.onPostExecute(result);              if(mDialog!=null&&mDialog.isShowing()){                  mDialog.dismiss();              }              if(isCancelled())                  return;          }          @Override          protected 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() {                                            @Override                      public void onCancel(DialogInterface dialog) {                          // TODO Auto-generated method stub                          cancel(true);                      }                  });                  mDialog.show();              }          }          @Override          protected 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);              }              else                  mDialog.setProgress(values[0].intValue());          }          private long unzip(){              long extractedSize = 0L;              Enumeration<ZipEntry> entries;              ZipFile zip = null;              try {                  zip = new ZipFile(mInput);                  long uncompressedSize = getOriginalSize(zip);                  publishProgress(0, (int) uncompressedSize);                                    entries = (Enumeration<ZipEntry>) 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 block                  e.printStackTrace();              } catch (IOException e) {                  // TODO Auto-generated catch block                  e.printStackTrace();              }finally{                  try {                      zip.close();                  } catch (IOException e) {                      // TODO Auto-generated catch block                      e.printStackTrace();                  }              }                    return extractedSize;          }                private long getOriginalSize(ZipFile file){              Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) 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 block                  e.printStackTrace();              }finally{                  try {                      out.close();                  } catch (IOException e) {                      // TODO Auto-generated catch block                      e.printStackTrace();                  }                  try {                      in.close();                  } catch (IOException e) {                      // TODO Auto-generated catch block                      e.printStackTrace();                  }              }              return count;          }                    private final class ProgressReportingOutputStream extends FileOutputStream{                    public ProgressReportingOutputStream(File file)                      throws FileNotFoundException {                  super(file);                  // TODO Auto-generated constructor stub              }                    @Override              public void write(byte[] buffer, int byteOffset, int byteCount)                      throws IOException {                  // TODO Auto-generated method stub                  super.write(buffer, byteOffset, byteCount);                  mProgress += byteCount;                  publishProgress(mProgress);              }                        }      }  



 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";          @Override          protected void 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();          }                @Override          public boolean onCreateOptionsMenu(Menu 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("确认")              .setMessage("是否下载?")              .setPositiveButton("是", new OnClickListener() {                                    @Override                  public void onClick(DialogInterface dialog, int which) {                      // TODO Auto-generated method stub                      Log.d(TAG, "onClick 1 = "+which);                      doDownLoadWork();                  }              })              .setNegativeButton("否", new OnClickListener() {                                    @Override                  public void onClick(DialogInterface dialog, int which) {                      // TODO Auto-generated method stub                      Log.d(TAG, "onClick 2 = "+which);                  }              })              .show();          }                    public void showUnzipDialog(){              new AlertDialog.Builder(this).setTitle("确认")              .setMessage("是否解压?")              .setPositiveButton("是", new OnClickListener() {                                    @Override                  public void onClick(DialogInterface dialog, int which) {                      // TODO Auto-generated method stub                      Log.d(TAG, "onClick 1 = "+which);                      doZipExtractorWork();                  }              })              .setNegativeButton("否", new OnClickListener() {                                    @Override                  public void onClick(DialogInterface dialog, int which) {                      // TODO Auto-generated method stub                      Log.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, true);              task.execute();          }                    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.execute();          }            }  

更多相关文章

  1. Android(安卓)文件下载与解压缩
  2. 浅谈android中的反编译
  3. Ubuntu搭建Eclipse+JDK+SDK的Android
  4. 自制android1.5的源码包
  5. Android(安卓)解压APK文件
  6. 如何编译 MTK 的模拟器(android)
  7. Android(安卓)ADB驱动安装详解
  8. 自制android1.5的源码包
  9. Funambol android eclipse上的配置及说明

随机推荐

  1. Android 处理横竖屏切换
  2. android中读写sd卡文件
  3. Android的Thread & ProgressBar
  4. Android Activity 设置全屏
  5. Android(安卓)如何获取经纬度
  6. Android(安卓)设备连接电脑显示offline
  7. 深入理解Android消息机制
  8. 漂亮的Android表格框架
  9. Android:UI设置-横竖屏转换、输入法键盘相
  10. android-listview控件