package com.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;
/**
* 封装了一些下载文件的类,可以在Activity文件中直接调用
* @author zl
*/
public class HttpDownLoad {
private URL url = null;
/**
* 根据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;
}
/**
* 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件中的内容
* 1.创建一个URL对象
* 2.通过URL对象,创建一个HttpURLConnection对象
* 3.得到InputStream
* 4.从InputStream中读取数据
*/
public String downloadText(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()));
//使用循环将读取的一行一行的数据存入到StringBuffer对象中
while((line = buffer.readLine()) != null){
sb.append(line);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {
buffer.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return sb.toString();
}
/**
* 根据URL下载文件,这个文件可以是其他文件,返回这个文件下载是否成功
* @param urlStr --地址
* @param path --存储路径
* @param fileName --存储文件名
* @param againDown --布尔值判断否在文件已存在时下载
* @return
* 返回值:-1-->下载失败,0-->下载成功,1-->文件存在
*/
public int downFile(String urlStr,String path,String fileName,Boolean againDown){
//生成一个InputStream对象
InputStream inputStream = null;
//创建FileUtils对象,用于判断要下载的文件是否存在
FileUtils fileUtils = new FileUtils();
boolean isFileUtils = fileUtils.isFileExist(path+fileName);
try {
//文件存在且不重新下载时,返回1
if(isFileUtils && againDown == false){
return 1;
}
//文件存在且要重新下载时或文件不存在时下载
else if((isFileUtils && againDown == true) || isFileUtils == false){
//根据URL输入流下载
inputStream = getInputStreamFromUrl(urlStr);
//调用存入SD卡的方法,并返回存入结果
File resultFile = fileUtils.write2SDFromInput(path, fileName, inputStream);
//存入为空时,返回-1
if(resultFile == null){
return -1;
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
//出现异常时,返回-1
return -1;
} finally{
try {
inputStream.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//都正常时,返回0
return 0;
}
}