`

Android 文件下载与解压缩

阅读更多
转载: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();  
        }  
      
    }  
分享到:
评论

相关推荐

    java android zip解压缩(解决压缩中文乱码问题)

    本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 首先,我们要明白乱码问题的根源。在文件的压缩和解压缩过程中,文件名通常被编码为字节序列,这个序列取决于原始文件名...

    解压缩全能王二维码生成器exe文件+手机apk

    在这个数字化迅速发展的时代,文件压缩与解压缩功能已经成为了日常工作和生活中不可或缺的一部分。而解压缩全能王作为一款集多项功能于一身的压缩工具,以其全面性和便捷性成为了用户管理文件的得力助手。本文将深入...

    Android 解压缩文件

    Android解压缩文件。Android原生的解压缩文件,使用时提供保存的路径即可

    安卓文件下载上传解压相关-android平台的7z压缩与解压缩.rar

    在Android平台上,处理文件下载、上传以及压缩与解压缩是常见的任务。7z是一种高效的压缩格式,具有较高的压缩率和良好的兼容性。本资源“安卓文件下载上传解压相关-android平台的7z压缩与解压缩.rar”可能包含了...

    android 压缩 解压缩

    `DemoZipUtils`是一个工具类,专门用于在Android平台上实现文件和文件夹的压缩与解压缩功能。下面将详细介绍这个工具类可能包含的关键知识点以及相关技术。 1. **ZIP文件格式**:ZIP是一种广泛使用的文件压缩格式,...

    javaandroid可用的ziprar解压缩代码实现.rar

    在Android平台上,对ZIP和RAR文件进行解压缩是常见的需求,比如在安装APK应用、更新资源文件或者处理用户上传的数据时。JavaAndroid可用的ziprar解压缩代码实现提供了这样的功能,但请注意,由于文件数量多,可能...

    Android 在线下载压缩包并解压到指定目录.zip

    Android提供了`java.util.zip`包,其中`ZipInputStream`和`ZipEntry`用于解压缩。首先,创建一个`ZipInputStream`,传入下载好的压缩文件的输入流。然后,遍历`ZipInputStream`,每次读取一个`ZipEntry`,创建对应...

    Android的zip解压缩

    本文将深入探讨如何在Android平台上进行zip文件的解压缩操作。 首先,我们需要理解zip文件的基本概念。Zip是一种常用的文件格式,用于存储多个文件和目录在一个单一的、可压缩的档案中。在Android上,我们可以使用...

    android的Zip压缩包下载以及解压缩

    总结,Android应用处理Zip文件下载与解压缩涉及多个步骤,包括网络请求、文件操作、解压缩算法以及异步处理。理解这些概念和技术对于开发Android应用是至关重要的。通过以上介绍,你应该能够实现从指定URL下载Zip...

    Android 加密压缩解密解压缩字符串简单DEMO

    "Android 加密压缩解密解压缩字符串简单DEMO"是一个示例项目,它展示了如何处理字符串的加密、压缩、解密和解压缩过程,这对于处理大量数据在后台与前台之间传输的情况非常有用。下面,我们将详细探讨这些关键知识点...

    Android-针对AndroidO和AndroidP的解压缩脚本

    总之,"Frida-Android-unpack-master"是一个针对Android O和P的高级解压缩解决方案,它利用了Frida的强大功能,为开发者提供了深入研究和调试APK文件的能力。这种工具在安全分析、应用调试、性能优化以及逆向工程等...

    Android例子源码支持解压缩的安卓文件管理器.zip

    另外还可以进行常规的复制移动删除重命名等操作,压缩文件的时候只能压缩成zip格式,不支持rar格式,解压缩也是紧支持zip格式,源码有比较详细的注释,需要的朋友可以下载研究一下默认编码UTF-8编译版本2.3.3,

    Android将assets中的zip压缩文件解压到SD卡

    在Android开发中,有时我们需要将应用内部的资源文件,如ZIP压缩文件,解压到外部存储(即SD卡)上,以便用户可以访问或使用这些数据。本文将详细讲解如何实现这一功能,主要涉及Android权限管理、文件操作以及ZIP...

    java、android可用的zip、rar解压缩代码实现

    本文将详细介绍如何在Android和Java环境中实现zip和rar文件的解压缩。 首先,让我们关注zip文件。在Java中,`java.util.zip`包提供了对zip文件的支持。你可以使用`ZipInputStream`来读取zip文件,并通过`ZipEntry`...

    Android例子源码支持解压缩的安卓文件管理器

    另外还可以进行常规的复制移动删除重命名等操作,压缩文件的时候只能压缩成zip格式,不支持rar格式,解压缩也是紧支持zip格式,源码有比较详细的注释,需要的朋友可以下载研究一下默认编码UTF-8编译版本2.3.3,

    unity解压缩zip包可用dll。net3.5;net4.0。亲测PC可用,移动端可用。

    标题和描述中提到的“unity解压缩zip包可用dll”,是指在Unity中用于解压缩ZIP文件的动态链接库(DLL)文件。 DLL(Dynamic Link Library)是Windows操作系统中的一个关键组件,它包含可由多个程序同时使用的代码和...

    Android 解、压缩文件

    在Android平台上,对文件进行解压缩是常见的操作,这在处理数据存储、更新应用程序资源或者传输数据时尤其有用。本文将深入探讨如何使用Android SDK中的API来实现文件的解压缩和压缩。 首先,我们来看解压缩文件的...

    (安卓APP项目源代码)文件管理器源码,文件拖曳,list弹性,root ,zip压缩解.zip

    (安卓APP项目源代码)文件管理器源码,文件拖曳,list弹性,root ,zip压缩解.zip(安卓APP项目源代码)文件管理器源码,文件拖曳,list弹性,root ,zip压缩解.zip(安卓APP项目源代码)文件管理器源码,文件拖曳,list弹性,...

    Android安卓img镜像文件解压,安卓备份文件解压,安卓备份的img文件解压缩

    需要解压安卓备份的img文件的来拿把,在Windows中查看img,支持XP,VISTA,WIN7,WIN8,更高.. Android安卓img镜像文件解压,安卓备份文件解压,安卓备份的img文件解压缩 很方便

Global site tag (gtag.js) - Google Analytics