Android开发中如何实现http下载文件呢(磨砺营马剑威)

2016-08-16  本文已影响187人  磨砺营IT

一、场景

下载存文本文件和下载如mp3等大容量的文件

界面

二、代码编写

1.AndroidMainfest.xml中配置

主要是解决网络权限和写SDCard的权限

package="linys.download" android:versionCode="1" android:versionName="1.0">

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中进行权限配置

*

*/

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中进行权限配置

*

*/

URL url=new URL(urlStr);

HttpURLConnection conn=(HttpURLConnection)url.openConnection();

//取得inputStream,并将流中的信息写入SDCard

/*

* 写前准备

* 1.在AndroidMainfest.xml中进行权限配置

*

* 取得写入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();

}

}

}

}

}

更多内容关注微信公众号mjw-java或访问www.moliying.com

上一篇下一篇

猜你喜欢

热点阅读