Android zip file Download and decompression instance _android

Source: Internet
Author: User
Tags flush stub

Download:
Downloadertask.java

Copy Code code as follows:

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);
&NBSP;&NBSP;&NBSP}
   else{
    mdialog.setmax (contentLength);
&NBSP;&NBSP;&NBSP}
  }
  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);
}

}
}

Extract:
Zipextractortask. java

Copy Code code as follows:

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, String, 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

Copy Code code as follows:

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 ("confirmation")
. Setmessage ("Do you want to download?) ")
. Setpositivebutton ("Yes", new Onclicklistener () {

@Override
public void OnClick (Dialoginterface dialog, int which) {
TODO auto-generated Method Stub
LOG.D (TAG, "OnClick 1 =" +which);
Dodownloadwork ();
}
})
. Setnegativebutton ("No", 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 ("confirmation")
. Setmessage ("Do you unpack?) ")
. Setpositivebutton ("Yes", new Onclicklistener () {

@Override
public void OnClick (Dialoginterface dialog, int which) {
TODO auto-generated Method Stub
LOG.D (TAG, "OnClick 1 =" +which);
Dozipextractorwork ();
}
})
. Setnegativebutton ("No", 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 ();
}

}

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.