Android中实现下载和解压zip文件功能代码分享
本文提供了2段Android代码,实现了从Android客户端下载ZIP文件并且实现ZIP文件的解压功能,非常实用,有需要的Android开发者可以尝试一下。
下载:
DownLoaderTask.java
packagecom.johnny.testzipanddownload; importjava.io.BufferedInputStream; importjava.io.BufferedOutputStream; importjava.io.File; importjava.io.FileNotFoundException; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.InputStream; importjava.io.OutputStream; importjava.net.MalformedURLException; importjava.net.URL; importjava.net.URLConnection; importandroid.app.ProgressDialog; importandroid.content.Context; importandroid.content.DialogInterface; importandroid.content.DialogInterface.OnCancelListener; importandroid.os.AsyncTask; importandroid.util.Log; publicclassDownLoaderTaskextendsAsyncTask<Void,Integer,Long>{ privatefinalStringTAG="DownLoaderTask"; privateURLmUrl; privateFilemFile; privateProgressDialogmDialog; privateintmProgress=0; privateProgressReportingOutputStreammOutputStream; privateContextmContext; publicDownLoaderTask(Stringurl,Stringout,Contextcontext){ super(); if(context!=null){ mDialog=newProgressDialog(context); mContext=context; } else{ mDialog=null; }
try{ mUrl=newURL(url); StringfileName=newFile(mUrl.getFile()).getName(); mFile=newFile(out,fileName); Log.d(TAG,"out="+out+",name="+fileName+",mUrl.getFile()="+mUrl.getFile()); }catch(MalformedURLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }
}
@Override protectedvoidonPreExecute(){ //TODOAuto-generatedmethodstub //super.onPreExecute(); if(mDialog!=null){ mDialog.setTitle("Downloading..."); mDialog.setMessage(mFile.getName()); mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mDialog.setOnCancelListener(newOnCancelListener(){
@Override publicvoidonCancel(DialogInterfacedialog){ //TODOAuto-generatedmethodstub cancel(true); } }); mDialog.show(); } } @Override protectedLongdoInBackground(Void...params){ //TODOAuto-generatedmethodstub returndownload(); } @Override protectedvoidonProgressUpdate(Integer...values){ //TODOAuto-generatedmethodstub //super.onProgressUpdate(values); if(mDialog==null) return; if(values.length>1){ intcontentLength=values[1]; if(contentLength==-1){ mDialog.setIndeterminate(true); } else{ mDialog.setMax(contentLength); } } else{ mDialog.setProgress(values[0].intValue()); } } @Override protectedvoidonPostExecute(Longresult){ //TODOAuto-generatedmethodstub //super.onPostExecute(result); if(mDialog!=null&&mDialog.isShowing()){ mDialog.dismiss(); } if(isCancelled()) return; ((MainActivity)mContext).showUnzipDialog(); } privatelongdownload(){ URLConnectionconnection=null; intbytesCopied=0; try{ connection=mUrl.openConnection(); intlength=connection.getContentLength(); if(mFile.exists()&&length==mFile.length()){ Log.d(TAG,"file"+mFile.getName()+"alreadyexits!!"); return0l; } mOutputStream=newProgressReportingOutputStream(mFile); publishProgress(0,length); bytesCopied=copy(connection.getInputStream(),mOutputStream); if(bytesCopied!=length&&length!=-1){ Log.e(TAG,"DownloadincompletebytesCopied="+bytesCopied+",length"+length); } mOutputStream.close(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnbytesCopied; } privateintcopy(InputStreaminput,OutputStreamoutput){ byte[]buffer=newbyte[1024*8]; BufferedInputStreamin=newBufferedInputStream(input,1024*8); BufferedOutputStreamout =newBufferedOutputStream(output,1024*8); intcount=0,n=0; try{ while((n=in.read(buffer,0,1024*8))!=-1){ out.write(buffer,0,n); count+=n; } out.flush(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }finally{ try{ out.close(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } try{ in.close(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } returncount; } privatefinalclassProgressReportingOutputStreamextendsFileOutputStream{ publicProgressReportingOutputStream(Filefile) throwsFileNotFoundException{ super(file); //TODOAuto-generatedconstructorstub } @Override publicvoidwrite(byte[]buffer,intbyteOffset,intbyteCount) throwsIOException{ //TODOAuto-generatedmethodstub super.write(buffer,byteOffset,byteCount); mProgress+=byteCount; publishProgress(mProgress); }
} }