精华内容
下载资源
问答
  • 其实在网上有很多介绍下载文件或者解压zip文件的文章,但是两者结合的不多,所以这篇文章在此记录一下下载zip文件并直接解压的方法,直接上代码,文末有源码下载下载: import java.io.BufferedInputStream; ...
  • 主要介绍了Android中实现下载解压zip文件功能代码分享,本文直接给出了实现代码,需要的朋友可以参考下
  • Android 在线下载压缩包并解压到指定目录 源码.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • android平台的7z压缩与解压缩.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • Android断点下载.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • Android应用源码之Android 在线下载压缩包并解压到指定目录.zip
  • android,断点下载,杀进程或关Activity继续下载,保证下载速度.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • android下载框架,支持单线程和多线程断点下载.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • Android ZIP文件下载以及解压.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • android文件下载存储demo.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 安卓Android源码——安卓Android 在线下载压缩包并解压到指定目录.rar
  • 安卓Android源码——安卓Android 在线下载压缩包并解压到指定目录.zip
  • Android 在线下载压缩包并解压到指定目录
  • Android一个多线程下载应用并提示安装源码.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 主要介绍了Android实现压缩解压文件的实例代码,涉及到批量压缩文件夹,解压缩一个文件等方面的知识点,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看下吧
  • Android--下载zip压缩文件并解压

    千次阅读 2016-12-21 17:05:14
    网上有很多介绍下载文件或者解压zip文件的文章,但是两者结合的不多,在此记录一下下载zip文件并直接解压的方法,直接上代码。 源码下载:http://download.csdn.net/detail/chaoyu168/9717756 下载: import java.io...

    网上有很多介绍下载文件或者解压zip文件的文章,但是两者结合的不多,在此记录一下下载zip文件并直接解压的方法,直接上代码。

    源码下载:http://download.csdn.net/detail/chaoyu168/9717756

    下载:

    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" />


    调用:

    //下载
    DownLoaderTask task = new DownLoaderTask("url", Environment.getExternalStorageDirectory().getPath()+"/app/", context);
    task.execute();
    //解压
    ZipExtractorTask task1 = new ZipExtractorTask(Environment.getExternalStorageDirectory().getPath()+"/app/a.zip", 
                    Environment.getExternalStorageDirectory().getPath()+"/app1/", context, true);
    task1.execute();
    

    展开全文
  • Android快速框架 多线程下载框架的技术(Android Afinal gson).zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • Android压缩文件

    2019-06-24 17:27:02
    Android压缩文件。Android原生的解压缩文件,使用时提供保存的路径即可
  • Android多线程、断点继传下载工具库---帮你搞定下载功能.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • android上传图片 php接收.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • android多线程下载器.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • Android上传文件到 .net服务器,服务器使用webservice.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • zip4j -- Java处理zip压缩文件的完整解决...支持文件压缩解压并加密解密,不过只适用于zip文件格式。rar文件不支持。jar包的局限性。但是我下载了支持rar加密解密的jar包。你可以自己尝试。如有疑问可以留言。谢谢!
  • android图片下载及处理,处理包括缓冲加载,预取图片等。.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 安卓端java代码实现对文件的压缩解压
  • Android 实现应用下载后自动安装 源码.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • Android选择系统相册或拍照上传源码.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 解压的工具类 package com.example.videodemo.zip; public class ZipProgressUtil { /*** * 解压通用方法 * * @param zipFileString * 文件路径 * @param outPathString * 解压路径 * @param listener * ...
  • Android端zip压缩解压,目前暂时只做zip格式支持,基于Zip4j 进行扩展成工具类,支持对单个文件,多个文件以及文件夹进行压缩,对压缩文件解压到到指定目录,支持压缩解压使用密码。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 207,730
精华内容 83,092
关键字:

安卓解压下载

友情链接: teacher.rar