Android 使用http协议下载文件
来源:互联网 发布:手机淘宝运营介绍 编辑:程序博客网 时间:2024/05/20 15:38
1. 创建HttpURLConnection对象
HttpDownloader downloader = new HttpDownloader();
2.获得一个InputStream对象
3.访问网络,在Manifest.xml声明:androi.permission.INTERNET
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="mars.download" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Download" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="4" /> <uses-permission android:name="android.permission.INTERNET"/> //允许网络访问 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> //允许写入SDK卡</manifest>
4.正文
Environment.getExternalStorageDirectory()// 获得SD卡的路径
package page.util;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下载文本文件 */ public String download(String urlStr){ StringBuffer sb = new StringBuffer(); String line = null; BufferedReader buffer = null; try{ url = new URL(urlStr); HttpURLConnection urlConn = (HttpURLConnection)url.openConnection(); 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(); } /** * 下载文件并写SD卡 * @param urlStr * @param path * @param fileName * @return 0-success,-1-fail,1-existed */ public int downFile(String urlStr,String path,String fileName){ InputStream inputStream= null; try{ FileUtil fileUtil = new FileUtil(); if(fileUtil.isFileExist(path+fileName)) return 1; else{ inputStream = getInputStreamFromUrl(urlStr); File resultFile = fileUtil.write2SDFromInput(path, fileName, inputStream); if(resultFile == null) return -1; } }catch(Exception e){ e.printStackTrace(); }finally{ try{ inputStream.close(); }catch(Exception e){ e.printStackTrace(); } } return 0; } public InputStream getInputStreamFromUrl(String urlStr) throws MalformedURLException,IOException{ url = new URL(urlStr); HttpURLConnection urlCon =(HttpURLConnection)url.openConnection(); InputStream inputStream = urlCon.getInputStream(); return inputStream; }}package page.util;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 FileUtil{ private String SDPATH; public String getSDPATH(){ return SDPATH; } public FileUtil(){ SDPATH= Environment.getExternalStorageDirectory()+"/"; } public File createSDFile(String fileName) throws IOException{ File file = new File(SDPATH+fileName); file.createNewFile(); return file; } public File createSDDir(String dirName) { File dir = new File(SDPATH+dirName); dir.mkdir(); return dir; } public boolean isFileExist(String fileName){ File file = new File(SDPATH+fileName); return file.exists(); } public File write2SDFromInput(String path,String fileName,InputStream input){ File file = null; OutputStream output = null; try{ createSDDir(path); file = createSDFile(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; } }
二、代码编写
1.AndroidMainfest.xml中配置
主要是解决网络权限和写SDCard的权限
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="linys.download" android:versionCode="1" android:versionName="1.0">
- <uses-sdk android:minSdkVersion="8" />
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".Download" android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- <!-- 访问网络和操作SD卡 加入的两个权限配置 -->
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- </manifest>
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="linys.download" android:versionCode="1" android:versionName="1.0">
- <uses-sdk android:minSdkVersion="8" />
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".Download" android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- <!-- 访问网络和操作SD卡 加入的两个权限配置 -->
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- </manifest>
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="linys.download" android:versionCode="1" android:versionName="1.0"><uses-sdk android:minSdkVersion="8" /><application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".Download" android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application><!-- 访问网络和操作SD卡 加入的两个权限配置 --><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /></manifest>
2.Activity编写
利用Http协议下载文件并存储到SDCard
1.创建一个URL对象
2.通过URL对象,创建一个HttpURLConnection对象
3.得到InputStream
4.从InputStream当中读取数据
存到SDCard
1.取得SDCard路径
2.利用读取大文件的IO读法,读取文件
- package linys.download;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.net.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Environment;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- /**
- *
- * @Project: Android_MyDownload
- * @Desciption: 利用Http协议下载文件并存储到SDCard
- 1.创建一个URL对象
- 2.通过URL对象,创建一个HttpURLConnection对象
- 3.得到InputStream
- 4.从InputStream当中读取数据
- 存到SDCard
- 1.取得SDCard路径
- 2.利用读取大文件的IO读法,读取文件
- *
- * @Author: LinYiSong
- * @Date: 2011-3-25~2011-3-25
- */
- public class MyDownload extends Activity {
- private Button downFileBtn;
- private Button downMP3Btn;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- downFileBtn=(Button)this.findViewById(R.id.downFile);
- downMP3Btn=(Button)this.findViewById(R.id.downMP3);
- downFileBtn.setOnClickListener(new DownFileClickListener());
- downMP3Btn.setOnClickListener(new DownMP3ClickListener());
- }
- /**
- *
- * @Project: Android_MyDownload
- * @Desciption: 只能读取文本文件,读取mp3文件会出现内存溢出现象
- * @Author: LinYiSong
- * @Date: 2011-3-25~2011-3-25
- */
- class DownFileClickListener implements OnClickListener{
- @Override
- public void onClick(View v) {
- String urlStr="http://172.17.54.91:8080/download/down.txt";
- try {
- /*
- * 通过URL取得HttpURLConnection
- * 要网络连接成功,需在AndroidMainfest.xml中进行权限配置
- * <uses-permission android:name="android.permission.INTERNET" />
- */
- URL url=new URL(urlStr);
- HttpURLConnection conn=(HttpURLConnection)url.openConnection();
- //取得inputStream,并进行读取
- InputStream input=conn.getInputStream();
- BufferedReader in=new BufferedReader(new InputStreamReader(input));
- String line=null;
- StringBuffer sb=new StringBuffer();
- while((line=in.readLine())!=null){
- sb.append(line);
- }
- System.out.println(sb.toString());
- } catch (MalformedURLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- /**
- *
- * @Project: Android_MyDownload
- * @Desciption: 读取任意文件,并将文件保存到手机SDCard
- * @Author: LinYiSong
- * @Date: 2011-3-25~2011-3-25
- */
- class DownMP3ClickListener implements OnClickListener{
- @Override
- public void onClick(View v) {
- String urlStr="http://172.17.54.91:8080/download/1.mp3";
- String path="file";
- String fileName="2.mp3";
- OutputStream output=null;
- try {
- /*
- * 通过URL取得HttpURLConnection
- * 要网络连接成功,需在AndroidMainfest.xml中进行权限配置
- * <uses-permission android:name="android.permission.INTERNET" />
- */
- URL url=new URL(urlStr);
- HttpURLConnection conn=(HttpURLConnection)url.openConnection();
- //取得inputStream,并将流中的信息写入SDCard
- /*
- * 写前准备
- * 1.在AndroidMainfest.xml中进行权限配置
- * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- * 取得写入SDCard的权限
- * 2.取得SDCard的路径: Environment.getExternalStorageDirectory()
- * 3.检查要保存的文件上是否已经存在
- * 4.不存在,新建文件夹,新建文件
- * 5.将input流中的信息写入SDCard
- * 6.关闭流
- */
- String SDCard=Environment.getExternalStorageDirectory()+"";
- String pathName=SDCard+"/"+path+"/"+fileName;//文件存储路径
- File file=new File(pathName);
- InputStream input=conn.getInputStream();
- if(file.exists()){
- System.out.println("exits");
- return;
- }else{
- String dir=SDCard+"/"+path;
- new File(dir).mkdir();//新建文件夹
- file.createNewFile();//新建文件
- output=new FileOutputStream(file);
- //读取大文件
- byte[] buffer=new byte[4*1024];
- while(input.read(buffer)!=-1){
- output.write(buffer);
- }
- output.flush();
- }
- } catch (MalformedURLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }finally{
- try {
- output.close();
- System.out.println("success");
- } catch (IOException e) {
- System.out.println("fail");
- e.printStackTrace();
- }
- }
- }
- }
- }
- Android 使用http协议下载文件
- Android文件下载使用Http协议
- 使用HTTP协议 下载文件
- 使用HTTP协议下载文件
- Android——使用HTTP协议下载文件
- VC使用HTTP协议下载文件
- HTTP协议文件下载
- android 使用http协议上传文件
- Android--使用Http协议实现文件上传
- android使用http协议上传文件
- C++ HTTP协议 下载文件
- HTTP协议实现文件下载
- Android实现基于http协议的文件下载
- Android下使用Http协议实现多线程断点续传下载
- Android 下使用 Http 协议实现多线程断点续传下载
- android使用http协议实现多线程断点下载
- Android HTTP下载文件
- 使用Http下载文件
- Imageview在部分机器上oppo find 5等系列高分辨率机器上缩小的Bug解决
- Linux环境下NFS文件系统的简单搭建过程
- 如何使用FFMPEG+H264实现RTP传输数据
- 黑马程序员---------父类,子类
- php中cookie数组创建以及使用,cookie的删除
- Android 使用http协议下载文件
- 正则化(regularization)
- AD采样实现AC计量之算法实现与流程
- Windows平台下的win socket网络编程-文件传输小范例:
- Broadcast Receiver详解
- UVA 10217: A Dinner with Schwarzenegger!!!
- ubuntu设置root密码
- 转】Fragments (Android官方文档中文版)
- sql函数 取第几个分格符之间的字符