Java/android downloads zip resources from the network
Package com.lapel.activity.html; 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;/***** download zip from the network **/public class DownLoaderZipFromNet extends AsyncTask
{Private final String TAG = "DownLoaderTask"; private URL mUrl; private File mFile; // private ProgressDialog mDialog; private int mProgress = 0; private ProgressReportingOutputStream mOutputStream; private Context mContext; string assetName; String path; /***** @ param url: the url of the downloaded file * @ param out * Local save path * @ param assetName * Name of the downloaded file + suffix * @ param context */public DownLoaderZipFromNet (string url, string out, Str Ing assetName, Context context) {super (); this. assetName = assetName; this. path = out; 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) {e. printStackTrace () ;}/// @ Override // protected void onPreExecute () {// if (mDia Log! = Null) {// mDialog. setTitle ("Downloading... "); // mDialog. setMessage (mFile. getName (); // mDialog. setProgressStyle (ProgressDialog. STYLE_HORIZONTAL); // mDialog. setOnCancelListener (new OnCancelListener () {// @ Override // public void onCancel (DialogInterface dialog) {// cancel (true );//}//}); // mDialog. show (); //} @ Overrideprotected Long doInBackground (Void... params) {return download ();} // @ Override // protec Ted void onProgressUpdate (Integer... 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 (); //} @ Overrideprotected void onPostExecute (Long result) {try {UnZipLocal. unzip (path + File. separator + SsetName, path); // extract from local sd to local System. out. println ("decompress the file after download");} catch (IOException e) {e. printStackTrace ();} // if (mDialog! = Null & mDialog. isShowing () {// mdiwing. dismiss (); //} // if (isCancelled () // return;} 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) {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, 102 4*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) {e. printStackTrace ();} finally {try {out. close ();} catch (IOException e) {e. printStackTrace ();} try {in. close ();} catch (IOException e) {e. printStackTrace () ;}} return count;} private final class ProgressReportingOutputStream extends FileOutputStream {public ProgressReportingOutputStream (File file) throws FileNotFoundException {super (file );} @ Overridepublic void write (byte [] buffer, int byteOffset, int byteCount) throws IOException {super. write (buffer, byteOffset, byteCount); mProgress ++ = byteCount; publishProgress (mProgress );}}}