中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android開發中怎么實現一個下載zip壓縮文件的功能

發布時間:2020-11-24 15:31:05 來源:億速云 閱讀:336 作者:Leah 欄目:移動開發

今天就跟大家聊聊有關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); 
  } 
   
 } 
} 

解壓:

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

權限:

<uses-permission android:name="android.permission.INTERNET" /> 
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
 <!-- 創建和刪除文件 --> 
 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> 
 <!-- 寫文件 --> 
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
 <uses-permission android:name="android.permission.VIBRATE" /> 
 <uses-permission android:name="android.permission.READ_APN_SETTINGS" /> 
 <uses-permission android:name="android.permission.RESTART_PACKAGES"/> 
 
 <!-- 統計 --> 
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
 <uses-permission android:name="android.permission.READ_LOGS" /> 
 <uses-permission android:name="android.permission.WAKE_LOCK" /> 
 <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" /> 

看完上述內容,你們對Android開發中怎么實現一個下載zip壓縮文件的功能有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

四子王旗| 壶关县| 永川市| 永新县| 榆林市| 新竹县| 泊头市| 上思县| 会同县| 慈利县| 澎湖县| 日喀则市| 特克斯县| 梁河县| 邵阳县| 莲花县| 廊坊市| 富源县| 苏尼特右旗| 临西县| 卫辉市| 清徐县| 什邡市| 大厂| 博乐市| 鄄城县| 龙陵县| 健康| 濮阳县| 绵竹市| 剑川县| 眉山市| 八宿县| 綦江县| 安远县| 淅川县| 金门县| 高淳县| 安丘市| 即墨市| 朝阳县|