赞
踩
关注微信号:javalearns 随时随地学Java
或扫一扫
随时随地学Java
本文提供了2段Android代码,实现了从Android客户端下载ZIP文件并且实现ZIP文件的解压功能,非常实用,有需要的Android开发者可以尝试一下。
下载:
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();
- }
- }
以上就是Android实现zip文件下载和解压功能,希望对你有所帮助。
.................... 【.........阅读全文】
Java免费学习 Java自学网 http://www.javalearns.com
关注微信号:javalearns 随时随地学Java
或扫一扫
随时随地学Java
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。