文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android开发中怎么实现一个下载zip压缩文件的功能

2023-05-31 11:42

关注

今天就跟大家聊聊有关Android开发中怎么实现一个下载zip压缩文件的功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

下载:

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯