android中下载文件到SD卡的方法

 以下是我使用过的android中下载文件到SD卡的方法,挺好使的。在这里我只把下载的代码给贴了出来,你在哪里调用这个方法,直接使用就可以了。当然,具体问题要具体对待,这段代码仅供参考,你可以修改,完全可以变成自己觉得方便使用的代码:

1.HttpDownloader类

package com.pp.tool;

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;

 /**
  * 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容
  * 1.创建一个URL对象
  * 2.通过URL对象,创建一个HttpURLConnection对象
  * 3.得到InputStram
  * 4.从InputStream当中读取数据
  * @param urlStr
  * @return
  */
 public String download(String urlStr) {
  
  StringBuffer sb = new StringBuffer();
  String line = null;
  BufferedReader buffer = null;
  try {
   // 创建一个URL对象
   url = new URL(urlStr);
   // 创建一个Http连接
   HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
   // 使用IO流读取数据
   buffer = new BufferedReader(new InputStreamReader(urlConn
     .getInputStream(),"UTF-8"));
   while ((line = buffer.readLine()) != null) {
    sb.append(line);
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    buffer.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return sb.toString();
 }

 /**
  * 该函数返回整形 -1:代表下载文件出错 0:代表下载文件成功 1:代表文件已经存在
  */
 public int downFile(String urlStr, String path, String fileName) {
  InputStream inputStream = null;
  try {
   FileUtils fileUtils = new FileUtils();
   
   if (fileUtils.isFileExist(path + fileName)) {
    return 1;
   } else {
    inputStream = getInputStreamFromUrl(urlStr);
    File resultFile = fileUtils.writeToSDFromInput(path,fileName, inputStream);
    if (resultFile == null) {
     return -1;
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
   return -1;
  } finally {
   try {
    inputStream.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return 0;
 }

 /**
  * 根据URL得到输入流
  *
  * @param urlStr
  * @return
  * @throws MalformedURLException
  * @throws IOException
  */
 public InputStream getInputStreamFromUrl(String urlStr)
   throws MalformedURLException, IOException {
  url = new URL(urlStr);
  HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
  InputStream inputStream = urlConn.getInputStream();
  return inputStream;
 }
}
2.FileUtils类

package com.pp.tool;

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() {
  //得到当前外部存储设备的目录
  SDPATH = Environment.getExternalStorageDirectory() + "/";
 }
 /**
  * 在SD卡上创建文件
  *
  * @throws IOException
  */
 public File creatSDFile(String fileName) throws IOException {
  
  File file = new File(SDPATH + fileName);
  file.createNewFile();
  return file;
 }
 
 /**
  * 在SD卡上创建目录
  *
  * @param dirName
  */
 public File creatSDDir(String dirName) {
  File dir = new File(SDPATH + dirName);
  dir.mkdir();
  return dir;
 }

 /**
  * 判断SD卡上的文件夹是否存在
  */
 public boolean isFileExist(String fileName){
  
  File file = new File(SDPATH + fileName);
  file.delete();
  return file.exists();
  
 }
 /**
  * 将一个InputStream里面的数据写入到SD卡中
  */
 public File writeToSDFromInput(String path,String fileName,InputStream input){
  
  File file =null;
  OutputStream output =null;
  try{
   creatSDDir(path);
   file = creatSDFile(path + fileName);
   output = new FileOutputStream(file);
   byte buffer [] = new byte[1024];
   int len  = 0;
   //如果下载成功就开往SD卡里些数据
   while((len =input.read(buffer))  != -1){
    output.write(buffer,0,len);
   }
   output.flush();
     }catch(Exception e){
   e.printStackTrace();
     }finally{
     
   try{
    input.close();
    output.close();
   }catch(Exception e){
    
    e.printStackTrace();
   }
  }
  return file;
 }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值