android java下载文件_android:http下载文件并保存到本地或SD卡

本文介绍了如何在Android应用中使用Java进行HTTP下载文件,并将其保存到SD卡。首先,通过Environment.getExternalStorageDirectory()获取SD卡路径,然后判断SD卡是否可读写。接着,展示了一个HttpDownloader类的实现,该类包含下载文本文件和任意文件的方法。最后,给出了MainActivity的示例,展示了如何触发文件下载操作。
摘要由CSDN通过智能技术生成

想把文件保存到SD卡中,一定要知道SD卡的路径,获取SD卡路径:

Environment.getExternalStorageDirectory()

另外,在保存之前要判断SD卡是否已经安装好,并且可读写:

//判断SDcard是否存在并且可读写

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

service.saveToSDCard(filename,filecontent);

Toast.makeText(getApplicationContext(), R.string.success,1).show();

}else{

Toast.makeText(getApplicationContext(), R.string.sdcarderror,1).show();

}

实例

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

330e20dae3205ad78f20477d247bf564.png

2.代码编写

AndroidMainfest.xml中配置

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

package="com.jingling.practice.downloadtest" >

android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" >

android:name=".MainActivity"android:label="@string/app_name" >

HttpDownloader.java

packageutil;importandroid.util.Log;importjava.io.BufferedReader;importjava.io.File;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;importjava.net.URL;/*** Created by Spring on 2015/11/7.

* 下载工具类*/

public classHttpDownloader {private URL url = null;private final String TAG = "TAG";/*** 读取文本文件

*@paramurlStr url路径

*@return文本信息

* 根据url下载文件,前提是这个文件中的内容是文本,

* 1.创建一个URL对象

* 2.通过URL对象,创建一个Http连接

* 3.得到InputStream

* 4.从InputStream中得到数据*/

publicString download(String urlStr) {

StringBuffer sb= newStringBuffer();

String line= null;

BufferedReader bufferedReader= null;try{

url= newURL(urlStr);//创建http连接

HttpURLConnection urlConn =(HttpURLConnection) url.openConnection();//使用IO流读取数据

bufferedReader = new BufferedReader(newInputStreamReader(urlConn.getInputStream()));while ((line = bufferedReader.readLine()) != null) {

sb.append(line);

}

}catch(IOException e) {

e.printStackTrace();

}finally{try{

bufferedReader.close();

}catch(IOException e) {

e.printStackTrace();

}

}

Log.e("TAG","下载txt文件");

Log.e("TAG",sb.toString());returnsb.toString();

}/*** 读取任何文件

* 返回-1 ,代表下载失败。返回0,代表成功。返回1代表文件已经存在

*

*@paramurlStr

*@parampath

*@paramfileName

*@return

*/

public intdownlaodFile(String urlStr, String path, String fileName) {

InputStream input= null;try{

FileUtil fileUtil= newFileUtil();if (fileUtil.isFileExist(path +fileName)) {return 1;

}else{

input=getInputStearmFormUrl(urlStr);

File resultFile=fileUtil.write2SDFromInput(path,fileName,input);if (resultFile == null)return -1;

}

}catch(IOException e) {

e.printStackTrace();return -1;

}finally{try{

input.close();

}catch(IOException e) {

e.printStackTrace();

}

}return 0;

}public InputStream getInputStearmFormUrl(String urlStr) throwsIOException {

url= newURL(urlStr);

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

InputStream input=urlConn.getInputStream();returninput;

}

}

FileUtil.java

packageutil;importandroid.os.Environment;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;/*** Created by Spring on 2015/11/7.*/

public classFileUtil {privateString SDPATH;publicFileUtil() {

}publicString getSDPATH() {returnSDPATH;

}publicFileUtil(String SDPATH){//得到外部存储设备的目录(/SDCARD)

SDPATH = Environment.getExternalStorageDirectory() + "/";

}/*** 在SD卡上创建文件

*@paramfileName

*@return*@throwsjava.io.IOException*/

public File createSDFile(String fileName) throwsIOException {

File file= new File(SDPATH +fileName);

file.createNewFile();returnfile;

}/*** 在SD卡上创建目录

*@paramdirName 目录名字

*@return文件目录*/

publicFile createDir(String dirName){

File dir= new File(SDPATH +dirName);

dir.mkdir();returndir;

}/*** 判断文件是否存在

*@paramfileName

*@return

*/

public booleanisFileExist(String fileName){

File file= new File(SDPATH +fileName);returnfile.exists();

}publicFile write2SDFromInput(String path,String fileName,InputStream input){

File file= null;

OutputStream output= null;try{

createDir(path);

file=createSDFile(path +fileName);

output= newFileOutputStream(file);byte [] buffer = new byte[4 * 1024];while(input.read(buffer) != -1){

output.write(buffer);

output.flush();

}

}catch(IOException e) {

e.printStackTrace();

}finally{try{

output.close();

}catch(IOException e) {

e.printStackTrace();

}

}returnfile;

}

}

3.MainActivity

packagecom.jingling.practice.downloadtest;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importutil.HttpDownloader;public class MainActivity extendsActivity {

HttpDownloader downloader ;privateButton btn_downFile;privateButton btn_downMP3;

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btn_downFile= (Button)this.findViewById(R.id.button);

btn_downMP3= (Button)this.findViewById(R.id.button2);

btn_downFile.setOnClickListener(newView.OnClickListener() {

@Overridepublic voidonClick(View v) {

downloader= newHttpDownloader();

String urlStr= "http://172.17.54.91:8080/download/down.txt";

downloader.download(urlStr);

}

});

btn_downMP3.setOnClickListener(newView.OnClickListener() {

@Overridepublic voidonClick(View v) {

String urlStr="http://172.17.54.91:8080/download/1.mp3";

String path="file";

String fileName="2.mp3";

HttpDownloader httpDownloader= newHttpDownloader();

httpDownloader.downlaodFile(urlStr,path,fileName);

}

});

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值