功能是实现下载文件,图片或MP3等,为了简单起见使用单线程,此代码为MarsAndroid教程的复制品,放在此处,留着参考。
首先是一个得到字节流随后保存到内存卡上的工具类:
package com.example.utils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import android.os.Environment; public class FileUtils { private String SDpath; public String getSDpath(){ return SDpath; } public FileUtils(){ //得到当前外部存储设备的目录,即/SDCARD,后边加"/"为了之后方便 SDpath=Environment.getExternalStorageDirectory()+"/"; } /** * 在SD卡上创建文件 * @param fileName * @return File * @throws IOException */ public File creatSDFile(String fileName) throws IOException{ File file=new File(SDpath+fileName); file.createNewFile(); return file; } /** * 在SDCARD创建目录 * @param dirName * @return */ public File creatSDDir(String dirName){ File dir=new File(SDpath+dirName); dir.mkdir(); return dir; } public boolean isFileExist(String fileName){ File file=new File(fileName); return file.exists(); } /** * 将一个InputStream里的数据写入SD卡 */ public File write2SDFromInput(String path,String fileName,InputStream is){ File file=null; OutputStream os=null; try{ creatSDDir(path); file=creatSDFile(path+fileName); os=new FileOutputStream(file); byte buffer[]=new byte[4*1024];//4kb while((is.read(buffer))!=-1){ os.write(buffer); } os.flush(); System.out.println("write to "+path+"sucess!"); }catch(Exception e){ e.printStackTrace(); }finally{ try{ os.close(); }catch(Exception e){ e.printStackTrace(); } } return file; } }
随后是文件下载类:
package com.example.utils; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class HttpDownloader { private URL url=null; //此方法返回文本,但并未保存到SD卡 public String downloadText(String urlstr){ StringBuffer sb=new StringBuffer(); String line=null; BufferedReader br=null; try{ url=new URL(urlstr); HttpURLConnection con= (HttpURLConnection)url.openConnection(); br=new BufferedReader(new InputStreamReader(con.getInputStream())); while((line=br.readLine())!=null){ sb.append(line); } }catch(Exception e){ e.printStackTrace(); }finally{ try { br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return sb.toString(); } /** * * @param urlstr * @param path * @param fileName * @return -1-error,0-success,1-file exist */ public int downloadMP3(String urlstr,String path,String fileName){ InputStream is=null; try{ FileUtils fileUtils=new FileUtils(); if(fileUtils.isFileExist(path+fileName)){ return 1; }else{ is=getInputStreamFromUrl(urlstr); File resultfile=fileUtils.write2SDFromInput(path, fileName, is); if(resultfile==null){ return -1; } } }catch(Exception e){ e.printStackTrace(); return -1; }finally{ try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return 0; } private InputStream getInputStreamFromUrl(String urlstr) throws MalformedURLException,IOException{ URL url=new URL(urlstr); HttpURLConnection con=(HttpURLConnection)url.openConnection(); InputStream is=con.getInputStream(); return is; } }