亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android zip文件下載和解壓實例

2020-04-11 11:58:16
字體:
來源:轉載
供稿:網友

下載:
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<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);
  }

 }
}

解壓:
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<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);
  }

 }
}

Main Activity
MainActivity.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";
 @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();
 }

}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成人av中文字幕| 日韩h在线观看| 中文字幕少妇一区二区三区| 亚洲精品动漫100p| 亚洲国产成人在线视频| 国产一区二区精品丝袜| 日本精品视频在线播放| 欧美日韩xxxxx| 精品视频—区二区三区免费| 国产午夜精品全部视频在线播放| 成人xxxxx| 国产精品成人免费电影| 欧美大片网站在线观看| 日韩一级黄色av| 国产一区二区三区日韩欧美| 日韩欧美一区二区在线| 55夜色66夜色国产精品视频| 日韩高清电影免费观看完整| 中文字幕精品在线视频| 最近中文字幕2019免费| 91免费国产视频| 夜夜嗨av一区二区三区免费区| 国产精品白嫩初高中害羞小美女| 亚洲美女www午夜| 狠狠色狠狠色综合日日五| 国产精品欧美一区二区三区奶水| 久久精品影视伊人网| 久久久欧美一区二区| 亚洲人线精品午夜| 国产精品www网站| 日韩毛片在线看| 国产成人97精品免费看片| 日韩电影在线观看永久视频免费网站| 欧美亚洲第一区| 91沈先生在线观看| 欧美日韩国产成人| 91国自产精品中文字幕亚洲| 秋霞成人午夜鲁丝一区二区三区| 欧美日产国产成人免费图片| 日韩综合中文字幕| 国模视频一区二区| 欧美日韩亚洲一区二区三区| 亚洲丁香婷深爱综合| 日韩精品在线看| 久久久亚洲影院你懂的| 国产成人免费av电影| 国产在线98福利播放视频| 狠狠躁夜夜躁人人躁婷婷91| 欧美黑人xxxx| 日韩视频―中文字幕| 在线丨暗呦小u女国产精品| 国产日韩精品电影| 国产婷婷成人久久av免费高清| 亚洲国内高清视频| 中文字幕亚洲情99在线| 亚洲一区二区三区乱码aⅴ| 国产亚洲精品美女| 中文字幕欧美视频在线| 亚洲欧美国产制服动漫| 国产精品1234| 国产精品99久久久久久久久| 91精品在线看| 日韩精品免费综合视频在线播放| 精品视频在线播放免| 久久福利视频网| 国产极品jizzhd欧美| 久久久久久亚洲精品| 一区二区欧美在线| 国产成人精品在线| 欧美又大又粗又长| 久久久久久久久爱| 国产亚洲精品美女| 国产精品国产三级国产aⅴ浪潮| 欧美日韩国产一区在线| 日韩av在线影院| 亚洲精品欧美日韩专区| 亚洲欧美在线磁力| 欧美午夜精品久久久久久浪潮| 久久久91精品国产一区不卡| 久久亚洲精品一区| 最新国产精品亚洲| 日韩av综合网站| 日韩一区二区久久久| 成人写真视频福利网| 亚洲石原莉奈一区二区在线观看| 亚洲第一区在线观看| 欧美大片在线免费观看| 亚洲专区中文字幕| 日韩成人激情视频| 久久久久久免费精品| 久久久久久久久爱| 国产精品久久精品| 国产噜噜噜噜久久久久久久久| 欧美高跟鞋交xxxxhd| 一夜七次郎国产精品亚洲| 成人免费淫片aa视频免费| 亚洲精品美女久久| 日韩欧美一区二区三区| 欧美日本高清一区| 中文字幕日韩欧美精品在线观看| 尤物99国产成人精品视频| 在线视频欧美性高潮| 国产一区二区色| 国产网站欧美日韩免费精品在线观看| 91成人免费观看网站| 亚洲成人黄色在线| 欧美视频在线观看 亚洲欧| 国产日韩在线视频| 亚洲天堂一区二区三区| 久久精品视频播放| 精品成人国产在线观看男人呻吟| 国产精品久久久久久久天堂| 国产97在线|日韩| 91久久精品久久国产性色也91| 91久久在线视频| 日韩视频一区在线| 精品视频在线播放免| 中文字幕一区二区三区电影| 国产精品网红直播| 久久综合五月天| 福利一区视频在线观看| 青青在线视频一区二区三区| 日韩中文视频免费在线观看| 欧美巨猛xxxx猛交黑人97人| 欧美中文字幕在线播放| 亚洲国产精品专区久久| 91精品啪aⅴ在线观看国产| 中文在线不卡视频| 欧美成人免费在线视频| 亚洲国产三级网| 2019中文字幕全在线观看| 亚洲精品久久视频| 中文字幕av一区二区| 日韩欧美在线国产| 国产精品美女久久久久久免费| 亚洲人成电影在线| 欧美电影免费观看高清完整| 欧美中文在线视频| 91九色蝌蚪国产| 国产精品91久久久| 国产精品9999| 亚洲已满18点击进入在线看片| 欧美黑人又粗大| 国产一区二中文字幕在线看| 两个人的视频www国产精品| 中文字幕亚洲无线码a| 欧美午夜宅男影院在线观看| 久久福利视频导航| 7777精品久久久久久| 蜜臀久久99精品久久久久久宅男| 国产精品视频一区二区高潮| 日韩av影视综合网| 欧美大片大片在线播放| 7777kkkk成人观看| 日韩成人在线播放| 国产一区二区三区视频免费| 日韩视频亚洲视频| 96精品视频在线| 国产一区二区三区视频在线观看| 91久久夜色精品国产网站| 久久久99久久精品女同性| 欧美日韩电影在线观看| 国产精品扒开腿爽爽爽视频| 亚洲高清不卡av|