android实现文件下载功能
程序员文章站
2023-11-17 19:19:46
android 在网络上下载文件,供大家参考,具体内容如下
步骤 :
1.使用http协议下载文件
- 创建一个httpurlconnection对象...
android 在网络上下载文件,供大家参考,具体内容如下
步骤 :
1.使用http协议下载文件
- 创建一个httpurlconnection对象 : httpurlconnection urlconn = (httpurlconnection) url.openconnection();
- 获取一个inputstream对象 : urlconn.getinputstream()
- 访问网络的权限 : android.permission.internet
2.将下载的文件写入sdcard
- 得到当前设备sd卡的目录 : environment.getexternalstragedirectory()
- 访问sd卡的权限 : android.permission.write_external_storage
代码 :
activity_main.xml
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context=".mainactivity" > <button android:id="@+id/btn_txt" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="download lrc" /> <button android:id="@+id/btn_mp3" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/btn_txt" android:text="download mp3" /> </relativelayout>
mainactivity.java
package com.chay.download; import com.chay.utils.httpdownloader; import android.app.activity; import android.os.bundle; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; public class mainactivity extends activity { string urlstr_txt = "http://192.168.56.1:8080/mp3/wan.lrc"; string urlstr_mp3 = "http://192.168.56.1:8080/mp3/wan.mp3"; string path = "mp3/"; string filename = "wan.mp3"; private button downloadtxtbutton; private button downloadmp3button; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); downloadtxtbutton = (button) findviewbyid(r.id.btn_txt); downloadtxtbutton.setonclicklistener(new downloadtxtlistener()); downloadmp3button = (button) findviewbyid(r.id.btn_mp3); downloadmp3button.setonclicklistener(new downloadmp3listener()); } //下载歌词文件按钮监听器 class downloadtxtlistener implements onclicklistener { @override public void onclick(view v) { thread t = new downloadtxtthread(); t.start(); system.out.println("txt--->"); } } //下载歌词文件线程 class downloadtxtthread extends thread{ @override public void run() { httpdownloader httpdownloader = new httpdownloader(); string lrc = httpdownloader.download(urlstr_txt); system.out.println(lrc); } } //下载mp3文件按钮监听器 class downloadmp3listener implements onclicklistener { @override public void onclick(view v) { thread h = new downmp3thread(); h.start(); system.out.println("mp3--->"); } } //下载mp3文件线程 class downmp3thread extends thread{ @override public void run() { httpdownloader httpdownloader = new httpdownloader(); int result = httpdownloader.downfile(urlstr_mp3, path, filename); system.out.println(result); } } }
工具类:
httpdownloader.java
package com.chay.utils; 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下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容 * 1.创建一个url对象 * 2.通过url对象,创建一个httpurlconnection对象 * 3.得到inputstram * 4.从inputstream当中读取数据 * @param urlstr * @return */ public string download(string urlstr) { stringbuffer sb = new stringbuffer(); string line = null; bufferedreader buffer = null; try { // 创建一个url对象 url = new url(urlstr); // 创建一个http连接 httpurlconnection urlconn = (httpurlconnection) url.openconnection(); // 使用io流读取数据 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(); } /** * 该函数返回整形 -1:代表下载文件出错 0:代表下载文件成功 1:代表文件已经存在 */ public int downfile(string urlstr, string path, string filename) { inputstream inputstream = null; try { fileutils fileutils = new fileutils(); if (fileutils.isfileexist(path + filename)) { return 1; } else { inputstream = getinputstreamfromurl(urlstr); file resultfile = fileutils.write2sdfrominput(path,filename, inputstream); if (resultfile == null) { return -1; } } } catch (exception e) { e.printstacktrace(); return -1; } finally { try { inputstream.close(); } catch (exception e) { e.printstacktrace(); } } return 0; } /** * 根据url得到输入流 * * @param urlstr * @return * @throws malformedurlexception * @throws ioexception */ public inputstream getinputstreamfromurl(string urlstr) throws malformedurlexception, ioexception { url = new url(urlstr); httpurlconnection urlconn = (httpurlconnection) url.openconnection(); inputstream inputstream = urlconn.getinputstream(); return inputstream; } }
fileutils.java
package com.chay.utils; 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 fileutils { private string sdpath; public string getsdpath() { return sdpath; } public fileutils() { //得到当前外部存储设备的目录 // /sdcard sdpath = environment.getexternalstoragedirectory() + "/"; } /** * 在sd卡上创建文件 * * @throws ioexception */ public file creatsdfile(string filename) throws ioexception { file file = new file(sdpath + filename); file.createnewfile(); return file; } /** * 在sd卡上创建目录 * * @param dirname */ public file creatsddir(string dirname) { file dir = new file(sdpath + dirname); dir.mkdirs(); return dir; } /** * 判断sd卡上的文件夹是否存在 */ public boolean isfileexist(string filename){ file file = new file(sdpath + filename); return file.exists(); } /** * 将一个inputstream里面的数据写入到sd卡中 */ public file write2sdfrominput(string path,string filename,inputstream input){ file file = null; outputstream output = null; try{ creatsddir(path); file = creatsdfile(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; } }
如果不能下载,请先将windows防火墙关闭。
上一篇: C#通过指针实现快速拷贝的方法
下一篇: 阿里分布式事务seata入门(采坑)