使用HttpURLConnection下载文件
一.把android.permission.INTERNET添加到AndroidMainfest.xml配置文件中,使整个程序有访问网络的权限。
<uses-permission android:name="android.permission.INTERNET"/>
二.创建一个下载连接并返回InputStream对象。InputStream对象就是下载的文件的字节流
/**
* 获取下载文件的InputStream对象
* @param urlStr 下载文件的地址
* @return 返回InputStream文件对象
* @throws MalformedURLException
* @throws IOException
*/
public InputStreamGet_inputStream(String urlStr)
throws MalformedURLException ,IOException
{
//创建按一个URL实例
url = new URL(urlStr);
//创建一个HttpURLConnection的链接对象
HttpURLConnection httpConn =(HttpURLConnection)url.openConnection();
//获取所下载文件的InputStream对象
InputStream inputStream=httpConn.getInputStream();
//返回下载文件的InputStream对象
return inputStream;
}
三. 如果下载文本文件可以直接对文件内的字符进行操作。
/**
* 下载文本文件,直接返回字符串
* @param urlStr 下载地址
* @return 返回文本文件的字符串
*/
public String DownTxt(StringurlStr)
{
//创建StringBuffer 对象存放转换后的字符串
StringBuffer sBuffer = newStringBuffer();
//创建临时的String变量,临时存放文本文件的每一行字符串
String line = null;
//BufferedReader有个可以一次读取一行内容的方法readLine()。
//所以创建ufferedReader对象存放下载的文本内容
BufferedReaderbufferedReader = null;
try {
//把Get_inputStream()方法返回的是字节流,转换成InputStreamReader类的字符流。
//由于字节与字符流不好操作所以转换成BufferedReader
//然后使用它的eadLine()方法一次读取一行内容。
bufferedReader = newBufferedReader(new nputStreamReader(Get_inputStream(urlStr)));
//循环读取每一行的内容赋值给StringBuffer 对象。
while ((line =bufferedReader.readLine()) != null ) {
sBuffer.append(line);
}
} catch (Exception e) {
// TODO: handleexception
e.printStackTrace();
}finally{
try {
bufferedReader.close();
} catch (Exception e){
// TODO:handle exception
e.printStackTrace();
}
}
return sBuffer.toString();
}
四.把文件直接写入到手机内存卡中
/**
* 写入文件
* @param inputStream 下载文件的字节流对象
* @param sdpath 文件的存放目录
*/
public void WriteFile( InputStreaminputStream , String sdpath) {
try {
//在指定目录创建一个空文件并获取文件对象
File file = createSDFile(sdpath);
//获取一个写入文件流对象
OutputStream ouput =new FileOutputStream(file);
//创建一个4*1024大小的字节数组,作为循环读取字节流的临时存储空
byte buffer[] = newbyte[4*1024];
//循环读取下载的文件到buffer对象数组中
while((inputStream.read(buffer)) != -1) {
//把文件写入到文件
ouput.write(buffer);
}
} catch (Exception e) {
// TODO: handleexception
e.printStackTrace();
}finally{
try {
//关闭写入流
ouput.close();
} catch (Exception e){
// TODO:handle exception
e.printStackTrace();
}
}
}
五.写入文件到SD卡需要用到权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>