Android利用Http下载文件
16lz
2021-01-23
Android利用Http下载文件
一、场景
下载存文本文件和下载如mp3等大容量的文件
界面
二、代码编写
1.AndroidMainfest.xml中配置
主要是解决网络权限和写SDCard的权限
Java代码- <?xmlversion="1.0"encoding="utf-8"?>
- <manifestxmlns:android="http://schemas.android.com/apk/res/android"
- package="linys.download"android:versionCode="1"android:versionName="1.0">
- <uses-sdkandroid:minSdkVersion="8"/>
- <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
- <activityandroid:name=".Download"android:label="@string/app_name">
- <intent-filter>
- <actionandroid:name="android.intent.action.MAIN"/>
- <categoryandroid:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
- </application>
- <!--访问网络和操作SD卡加入的两个权限配置-->
- <uses-permissionandroid:name="android.permission.INTERNET"/>
- <uses-permissionandroid: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读法,读取文件
- packagelinys.download;
- importjava.io.BufferedReader;
- importjava.io.File;
- importjava.io.FileOutputStream;
- importjava.io.IOException;
- importjava.io.InputStream;
- importjava.io.InputStreamReader;
- importjava.io.OutputStream;
- importjava.net.HttpURLConnection;
- importjava.net.MalformedURLException;
- importjava.net.URL;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.os.Environment;
- importandroid.view.View;
- importandroid.view.View.OnClickListener;
- importandroid.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
- */
- publicclassMyDownloadextendsActivity{
- privateButtondownFileBtn;
- privateButtondownMP3Btn;
- /**Calledwhentheactivityisfirstcreated.*/
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- downFileBtn=(Button)this.findViewById(R.id.downFile);
- downMP3Btn=(Button)this.findViewById(R.id.downMP3);
- downFileBtn.setOnClickListener(newDownFileClickListener());
- downMP3Btn.setOnClickListener(newDownMP3ClickListener());
- }
- /**
- *
- *@Project:Android_MyDownload
- *@Desciption:只能读取文本文件,读取mp3文件会出现内存溢出现象
- *@Author:LinYiSong
- *@Date:2011-3-25~2011-3-25
- */
- classDownFileClickListenerimplementsOnClickListener{
- @Override
- publicvoidonClick(Viewv){
- StringurlStr="http://172.17.54.91:8080/download/down.txt";
- try{
- /*
- *通过URL取得HttpURLConnection
- *要网络连接成功,需在AndroidMainfest.xml中进行权限配置
- *<uses-permissionandroid:name="android.permission.INTERNET"/>
- */
- URLurl=newURL(urlStr);
- HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
- //取得inputStream,并进行读取
- InputStreaminput=conn.getInputStream();
- BufferedReaderin=newBufferedReader(newInputStreamReader(input));
- Stringline=null;
- StringBuffersb=newStringBuffer();
- while((line=in.readLine())!=null){
- sb.append(line);
- }
- System.out.println(sb.toString());
- }catch(MalformedURLExceptione){
- e.printStackTrace();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- }
- /**
- *
- *@Project:Android_MyDownload
- *@Desciption:读取任意文件,并将文件保存到手机SDCard
- *@Author:LinYiSong
- *@Date:2011-3-25~2011-3-25
- */
- classDownMP3ClickListenerimplementsOnClickListener{
- @Override
- publicvoidonClick(Viewv){
- StringurlStr="http://172.17.54.91:8080/download/1.mp3";
- Stringpath="file";
- StringfileName="2.mp3";
- OutputStreamoutput=null;
- try{
- /*
- *通过URL取得HttpURLConnection
- *要网络连接成功,需在AndroidMainfest.xml中进行权限配置
- *<uses-permissionandroid:name="android.permission.INTERNET"/>
- */
- URLurl=newURL(urlStr);
- HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
- //取得inputStream,并将流中的信息写入SDCard
- /*
- *写前准备
- *1.在AndroidMainfest.xml中进行权限配置
- *<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- *取得写入SDCard的权限
- *2.取得SDCard的路径:Environment.getExternalStorageDirectory()
- *3.检查要保存的文件上是否已经存在
- *4.不存在,新建文件夹,新建文件
- *5.将input流中的信息写入SDCard
- *6.关闭流
- */
- StringSDCard=Environment.getExternalStorageDirectory()+"";
- StringpathName=SDCard+"/"+path+"/"+fileName;//文件存储路径
- Filefile=newFile(pathName);
- InputStreaminput=conn.getInputStream();
- if(file.exists()){
- System.out.println("exits");
- return;
- }else{
- Stringdir=SDCard+"/"+path;
- newFile(dir).mkdir();//新建文件夹
- file.createNewFile();//新建文件
- output=newFileOutputStream(file);
- //读取大文件
- byte[]buffer=newbyte[4*1024];
- while(input.read(buffer)!=-1){
- output.write(buffer);
- }
- output.flush();
- }
- }catch(MalformedURLExceptione){
- e.printStackTrace();
- }catch(IOExceptione){
- e.printStackTrace();
- }finally{
- try{
- output.close();
- System.out.println("success");
- }catch(IOExceptione){
- System.out.println("fail");
- e.printStackTrace();
- }
- }
- }
- }
- }
更多相关文章
- android获取各路径下的文件流
- Android 代码执行Linux Shell小记
- android studio中xml文件代码提示问题
- Android MediaScanner源代码解析
- Android Studio多渠道批量打包及代码混淆
- Android下的应用编程——用HTTP协议实现文件上传功能
- Android 解压APK文件