1.使用HTTP协议下载文件
文件下载的主要步骤
①创建一个HttpURLConnection对象
HttpURLConnection urlConn = (httpURLConnection)url.openConnection();
获得一个InputConnection对象
urlConn.getInputStream() 从而获得一个输入流,向程序当中读入数据,输出流向目标写出数据
访问网络权限
android.permision.INTERNET
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();
}
urlConn.getInputStream() 字节流处理
new InputStreamReader 字符流处理
BufferedReader中的readline() 可以按行来读取数据
2.将下载的文件写入SDCARD
①访问SD卡
得到当前设备SD卡的目录
Environment.getExternalStorageDirectory()
访问SD卡的权限
android.permission.WRITE_EXTERNAL_STORAGE 必须在Manifest文件里进行声明,才能有写的权利
public FileUtils() {
//得到当前外部存储设备的目录
// /SDCARD
SDPATH = Environment.getExternalStorageDirectory() + "/";
} 构造函数,为SDPATH赋值
public File write2SDFromInput(String path,String fileName,InputStream input)
String path 把InputStream写入到哪一个目录中去
String fileName 文件名
InputStream input 变量
outputstream 写入数据
inputstream 读取数据
HttpDownLoader.java
public int downFile(String urlStr, String path, String fileName)
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;
}
}