Android(安卓)文件下载与解压缩
16lz
2022-01-22
DownLoaderTask.java
[java] view plain copy
- 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);
- }
- }
- }
解压:
ZipExtractorTask .java
[java] view plain copy
- 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.util.Enumeration;
- importjava.util.zip.ZipEntry;
- importjava.util.zip.ZipException;
- importjava.util.zip.ZipFile;
- importandroid.app.ProgressDialog;
- importandroid.content.Context;
- importandroid.content.DialogInterface;
- importandroid.content.DialogInterface.OnCancelListener;
- importandroid.os.AsyncTask;
- importandroid.util.Log;
- publicclassZipExtractorTaskextendsAsyncTask<Void,Integer,Long>{
- privatefinalStringTAG="ZipExtractorTask";
- privatefinalFilemInput;
- privatefinalFilemOutput;
- privatefinalProgressDialogmDialog;
- privateintmProgress=0;
- privatefinalContextmContext;
- privatebooleanmReplaceAll;
- publicZipExtractorTask(Stringin,Stringout,Contextcontext,booleanreplaceAll){
- super();
- mInput=newFile(in);
- mOutput=newFile(out);
- if(!mOutput.exists()){
- if(!mOutput.mkdirs()){
- Log.e(TAG,"Failedtomakedirectories:"+mOutput.getAbsolutePath());
- }
- }
- if(context!=null){
- mDialog=newProgressDialog(context);
- }
- else{
- mDialog=null;
- }
- mContext=context;
- mReplaceAll=replaceAll;
- }
- @Override
- protectedLongdoInBackground(Void...params){
- //TODOAuto-generatedmethodstub
- returnunzip();
- }
- @Override
- protectedvoidonPostExecute(Longresult){
- //TODOAuto-generatedmethodstub
- //super.onPostExecute(result);
- if(mDialog!=null&&mDialog.isShowing()){
- mDialog.dismiss();
- }
- if(isCancelled())
- return;
- }
- @Override
- protectedvoidonPreExecute(){
- //TODOAuto-generatedmethodstub
- //super.onPreExecute();
- if(mDialog!=null){
- mDialog.setTitle("Extracting");
- mDialog.setMessage(mInput.getName());
- mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
- mDialog.setOnCancelListener(newOnCancelListener(){
- @Override
- publicvoidonCancel(DialogInterfacedialog){
- //TODOAuto-generatedmethodstub
- cancel(true);
- }
- });
- mDialog.show();
- }
- }
- @Override
- protectedvoidonProgressUpdate(Integer...values){
- //TODOAuto-generatedmethodstub
- //super.onProgressUpdate(values);
- if(mDialog==null)
- return;
- if(values.length>1){
- intmax=values[1];
- mDialog.setMax(max);
- }
- else
- mDialog.setProgress(values[0].intValue());
- }
- privatelongunzip(){
- longextractedSize=0L;
- Enumeration<ZipEntry>entries;
- ZipFilezip=null;
- try{
- zip=newZipFile(mInput);
- longuncompressedSize=getOriginalSize(zip);
- publishProgress(0,(int)uncompressedSize);
- entries=(Enumeration<ZipEntry>)zip.entries();
- while(entries.hasMoreElements()){
- ZipEntryentry=entries.nextElement();
- if(entry.isDirectory()){
- continue;
- }
- Filedestination=newFile(mOutput,entry.getName());
- if(!destination.getParentFile().exists()){
- Log.e(TAG,"make="+destination.getParentFile().getAbsolutePath());
- destination.getParentFile().mkdirs();
- }
- if(destination.exists()&&mContext!=null&&!mReplaceAll){
- }
- ProgressReportingOutputStreamoutStream=newProgressReportingOutputStream(destination);
- extractedSize+=copy(zip.getInputStream(entry),outStream);
- outStream.close();
- }
- }catch(ZipExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }catch(IOExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }finally{
- try{
- zip.close();
- }catch(IOExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- }
- returnextractedSize;
- }
- privatelonggetOriginalSize(ZipFilefile){
- Enumeration<ZipEntry>entries=(Enumeration<ZipEntry>)file.entries();
- longoriginalSize=0l;
- while(entries.hasMoreElements()){
- ZipEntryentry=entries.nextElement();
- if(entry.getSize()>=0){
- originalSize+=entry.getSize();
- }
- }
- returnoriginalSize;
- }
- 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);
- }
- }
- }
Main Activity
MainActivity.java[java] view plain copy
- packagecom.johnny.testzipanddownload;
- importandroid.os.Bundle;
- importandroid.os.Environment;
- importandroid.app.Activity;
- importandroid.app.AlertDialog;
- importandroid.content.DialogInterface;
- importandroid.content.DialogInterface.OnClickListener;
- importandroid.util.Log;
- importandroid.view.Menu;
- publicclassMainActivityextendsActivity{
- privatefinalStringTAG="MainActivity";
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- 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
- publicbooleanonCreateOptionsMenu(Menumenu){
- //Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
- getMenuInflater().inflate(R.menu.main,menu);
- returntrue;
- }
- privatevoidshowDownLoadDialog(){
- newAlertDialog.Builder(this).setTitle("确认")
- .setMessage("是否下载?")
- .setPositiveButton("是",newOnClickListener(){
- @Override
- publicvoidonClick(DialogInterfacedialog,intwhich){
- //TODOAuto-generatedmethodstub
- Log.d(TAG,"onClick1="+which);
- doDownLoadWork();
- }
- })
- .setNegativeButton("否",newOnClickListener(){
- @Override
- publicvoidonClick(DialogInterfacedialog,intwhich){
- //TODOAuto-generatedmethodstub
- Log.d(TAG,"onClick2="+which);
- }
- })
- .show();
- }
- publicvoidshowUnzipDialog(){
- newAlertDialog.Builder(this).setTitle("确认")
- .setMessage("是否解压?")
- .setPositiveButton("是",newOnClickListener(){
- @Override
- publicvoidonClick(DialogInterfacedialog,intwhich){
- //TODOAuto-generatedmethodstub
- Log.d(TAG,"onClick1="+which);
- doZipExtractorWork();
- }
- })
- .setNegativeButton("否",newOnClickListener(){
- @Override
- publicvoidonClick(DialogInterfacedialog,intwhich){
- //TODOAuto-generatedmethodstub
- Log.d(TAG,"onClick2="+which);
- }
- })
- .show();
- }
- publicvoiddoZipExtractorWork(){
- //ZipExtractorTasktask=newZipExtractorTask("/storage/usb3/system.zip","/storage/emulated/legacy/",this,true);
- ZipExtractorTasktask=newZipExtractorTask("/storage/emulated/legacy/testzip.zip","/storage/emulated/legacy/",this,true);
- task.execute();
- }
- privatevoiddoDownLoadWork(){
- DownLoaderTasktask=newDownLoaderTask("http://192.168.9.155/johnny/testzip.zip","/storage/emulated/legacy/",this);
- //DownLoaderTasktask=newDownLoaderTask("http://192.168.9.155/johnny/test.h264",getCacheDir().getAbsolutePath()+"/",this);
- task.execute();
- }
- }
更多相关文章
- MacAndroid源码下载 Android10详解
- 最新Android(安卓)ADT, SDK, SDK_tool等官方下载说明(及时更新)
- Android(安卓)SDK 2.3与Eclipse最新版开发环境搭建(一)
- 浅谈android中的反编译
- 搭建自己的android 开发环境 (eclipse + ADT)
- 《Android/OPhone 开发完全讲义》样章和目录下载
- Android(安卓)SDK 2.3与Eclipse最新版开发环境搭建(一)
- Android学习建议
- Android(安卓)studio Gradle home can not be found - Android(