package com.vanco.abplayer.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.http.util.EncodingUtils;
import android.util.Log;
import android.util.Xml.Encoding;
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;
String xmlString = "";
try {
// 创建一个URL对象
url = new URL(urlstr);
// 创建一个Http连接
HttpURLConnection urlConn = (HttpURLConnection) url
.openConnection();
// 使用IO流读取数据
buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream(),"utf-8")); // 防止中文出现乱码 gb2312 utf-8
for(String temp = buffer.readLine(); temp != null;xmlString += temp ,temp = buffer.readLine());
// 去除字符串中的换行符,制表符,回车符。
xmlString = xmlString.replaceAll("/n|/t|/r", "");
// while ((line = buffer.readLine()) != null) {
// sb.append(line);
// }
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
buffer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return xmlString;
}
/**
* 可以下载字节流文件到SD卡中
*
* @param urlstr 要下载文件的URI地址
* @param Path 在SD卡上文件夹的路径
* @param FileName 在SD卡上文件的名称
* @return 该函数返回整型:-1代表下载失败,0代表下载成功,1代表文件已经存在
*/
public int download(String urlstr, String Path, String FileName) {
InputStream inputstream = null;
BufferedReader buffer = null;
try {
FileUitl fileUitls = new FileUitl();
System.out.println(Path + FileName);
if (fileUitls.isFileExist(Path + FileName)) {
return 1;
} else {
// 获取URI中的字节流
inputstream = getInputStreamFromUrl(urlstr);
// 把字节流转换成字符流
buffer = new BufferedReader(new InputStreamReader(inputstream,
"gb2312")); // 防止中文出现乱码 UTF-8
File resultFile = fileUitls.write2SDFromWrite(Path, FileName,
buffer);
if (resultFile == null) {
return -1;
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return -1;
} finally {
try {
if(buffer != null)
buffer.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
return 0;
}
/**
* 可以下载字符流和字节流文件到SD卡中
*
* @param urlstr
* @param Path
* @param FileName
* @return 该函数返回整型:-1代表下载失败,0代表下载成功,1代表文件已经存在
*/
public int downFile(String urlstr, String Path, String FileName) {
InputStream inputstream = null;
try {
FileUitl fileUitls = new FileUitl();
if (fileUitls.isFileExist(Path + FileName)) {
return 1;
} else {
inputstream = getInputStreamFromUrl(urlstr);
File resultFile = fileUitls.write2SDFromInput(Path, FileName,
inputstream);
if (resultFile == null) {
return -1;
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return -1;
} finally {
try {
inputstream.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
return 0;
}
/**
* 根据URL得到输入流
*
* @param urlstr
* @return
* @throws MalformedURLException
* @throws IOException
*/
private InputStream getInputStreamFromUrl(String urlstr)
throws MalformedURLException, IOException {
// TODO Auto-generated method stub
url = new URL(urlstr);
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
InputStream inputStream = urlConn.getInputStream();
return inputStream;
}
// 以下是测试字符编码的
public static void testCharset(String datastr){
try {
String temp = new String(datastr.getBytes(), "GBK");
Log.v("TestCharset","****** getBytes() -> GBK ******/n"+temp);
temp = new String(datastr.getBytes("GBK"), "UTF-8");
Log.v("TestCharset","****** GBK -> UTF-8 *******/n"+temp);
temp = new String(datastr.getBytes("GBK"), "ISO-8859-1");
Log.v("TestCharset","****** GBK -> ISO-8859-1 *******/n"+temp);
temp = new String(datastr.getBytes("ISO-8859-1"), "UTF-8");
Log.v("TestCharset","****** ISO-8859-1 -> UTF-8 *******/n"+temp);
temp = new String(datastr.getBytes("ISO-8859-1"), "GBK");
Log.v("TestCharset","****** ISO-8859-1 -> GBK *******/n"+temp);
temp = new String(datastr.getBytes("UTF-8"), "GBK");
Log.v("TestCharset","****** UTF-8 -> GBK *******/n"+temp);
temp = new String(datastr.getBytes("UTF-8"), "ISO-8859-1");
Log.v("TestCharset","****** UTF-8 -> ISO-8859-1 *******/n"+temp);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}