android中文件简单下载

来源:互联网 发布:数组tostring方法 编辑:程序博客网 时间:2024/05/22 03:51

在java中对于文件的下载,最基本的就是对于流的操作。当然在android中也是如此。为了进行文件的下载,构建一个简单的web项目,利用tomcat作为服务器。

 

 

这是web项目的目录结构,主要就是对1.txt文件的下载实现。

 

对于主界面只是简单提供了两个按键。

 

 

当点击FileLoadMp3时,会自动下载1.txt文件到指定目录。查看按键的click事件:

@Overridepublic void onClick(View v) {HttpDownload downLoad=new HttpDownload();FileUtils fileUtils=new FileUtils();String urls="http://1xx.1x.1xx.2xx:8080/RegisterUser/1.txt";try {fileUtils.write2SDFormInput("lo","1.txt", downLoad.getInputStreamFromUrl(urls));} catch (IOException e) {e.printStackTrace();}}

 

可以看到在响应事件中,有两个新的类,一个是HttpDownload,一个是FileUtils。对于第一个类,主要是利用他的一个方法即getInputStreamFromUrl,利用传入的url得到目标对象的输入流。

而FIleUtils则是在得到输入流的基本上,将其构造成文件,并写回到sdcard中去。

public InputStream getInputStreamFromUrl(String urls) throws IOException {URL url = new URL(urls);HttpURLConnection urlcon = (HttpURLConnection) url.openConnection();return urlcon.getInputStream();}

很简单,利用URL可以很方便的得到对应的输入流。关键是对于异常的一些处理。从而可以增加用户体验。

 

public File write2SDFormInput(String path,String filename,InputStream input){File file=null;FileOutputStream fos=null;createSDDir(path);file=createFileInSDCard(filename, path);System.out.println("FileName="+file.getName());try {fos=new FileOutputStream(file);byte buffer[]=new byte[4*1024];int temp=0;while((temp=input.read(buffer))!=-1){fos.write(buffer, 0, temp);}fos.flush();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{try {fos.close();} catch (IOException e) {e.printStackTrace();}}return file;}

以上方法即是将流写入到文件中去,path为路径,filename为文件名,input为输入流。

为了得到sdcard的根目录,可以采用

 

 

 


SDCardRoot=Environment.getExternalStorageDirectory().getAbsolutePath()+"/"; 

这条语句得到。如在我手机则得到/storage/sdcard0/

 

public File createFileInSDCard(String filename,String dir){File temp=new File(SDCardRoot+dir+File.separator+filename);try {System.out.println("createFileInSDCard---"+temp);temp.createNewFile();} catch (IOException e) {e.printStackTrace();}return temp;}public File createSDDir(String dir){File temp=new File(SDCardRoot+dir+File.separator);//System.out.println(temp.mkdirs());temp.mkdirs();return temp;}


创建目录,和文件,以供写入输入流。

最终下载成功。

 

程序还有诸多不完善的地方,比如文件名是以参数得到的,而不是程序自动获取。留给读者自己完善吧。

 

 

 

 


 

原创粉丝点击