Android之文件下载

来源:互联网 发布:linux kill命令 编辑:程序博客网 时间:2024/05/05 04:24

在学校没事做,慢慢地开始接触Android开发,也是从基础开始,一点点地开始学习,希望把每天所学的东西记录与分享

关于Android文件下载:

1、下面是一个下载工具类:

 

package com.zqy.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; /**  * 根据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()));   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.write2SDFromInput(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、文件工具类:

package com.zqy.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卡上创建文件  *   * @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);  return file.exists(); }  /**  * 将一个InputStream里面的数据写入到SD卡中  */ public File write2SDFromInput(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[4 * 1024];   while((input.read(buffer)) != -1){    output.write(buffer);   }   output.flush();  }  catch(Exception e){   e.printStackTrace();  }  finally{   try{    output.close();   }   catch(Exception e){    e.printStackTrace();   }  }  return file; }} 


 

3、从网上下东西,要在AndroidManifest.xml里配置如下信息:

<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


 

4、android手机做下载文件时,报了如下异常: 
java.net.ConnectException: localhost/127.0.0.1:8080 - 
Connection refused
 

报错在这一段代码 

Java代码 
URL url = new URL("http://localhost:8080/mp3/resource.xml");     
URLConnection urlconn = url.openConnection();    

原来模拟器默认把localhost或者127.0.0.1当做本身了 
在网上查了下,在模拟器上可以用10.0.2.2代替127.0.0.1和localhost 
另外如果是在局域网环境可以用 192.168.0.x或者192.168.1.x(根据具体配置)连接本机