这篇文章主要为大家详细介绍了机器人实现文件下载功能,安卓在网络上下载文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
机器人在网络上下载文件,供大家参考,具体内容如下
步骤:
1.使用超文本传送协议协议下载文件
-创建一个HttpURLConnection对象:HttpURLConnection URL连接=(HttpURLConnection)URL。打开连接();
-获取一个输入流对象:urlConn.getInputStream()
-访问网络的权限:android.permission.INTERNET
2.将下载的文件写入SDCARD
-得到当前设备南达科他州卡的目录:环境。getexternalstragedirectory()
-访问南达科他州卡的权限:安卓。许可。写_外部_存储
代码:
activity_main.xml
相对布局xmlns:Android=' http://模式。安卓。' com/apk/RES/Android '
xmlns:tools=' http://模式。安卓。' com/tools '
Android:layout _ width=' match _ parent '
Android:layout _ height=' match _ parent '
Android:padding bottom=' @ dimen/activity _ vertical _ margin '
Android:padding left=' @ dimen/activity _ horizontal _ margin '
Android:padding right=' @ dimen/activity _ horizontal _ margin '
Android:padding top=' @ dimen/activity _ vertical _ margin '
工具:上下文='。'主要活动'
纽扣
android:id='@ id/btn_txt '
Android:layout _ width=' match _ parent '
Android:layout _ height=' wrap _ content '
android:text='下载lrc' /
纽扣
android:id='@ id/btn_mp3 '
Android:layout _ width=' match _ parent '
Android:layout _ height=' wrap _ content '
Android:layout _ below=' @ id/BTN _ txt '
android:text='下载mp3' /
/RelativeLayout
MainActivity.java
包com。恰伊。下载;
导入com。恰伊。utils。http下载器;
导入安卓。app。活动;
导入安卓。OS。捆绑;
导入安卓。查看。查看;
导入安卓。查看。查看。onclick侦听器;
导入安卓。小部件。按钮;
公共类主要活动扩展活动{
字符串urlStr _ txt=' http://192。168 .56 .1:8080/MP3/wan。LRC ';
字符串urlStr _ MP3=' http://192。168 .56 .1:8080/MP3/wan。MP3 ';
string path=' MP3/';
String fileName=' wan.mp3
私有按钮downloadTxtButton
私有按钮下载MP3按钮
@覆盖
受保护的void onCreate(Bundle saved instancestate){
超级棒。oncreate(savedInstanceState);
setContentView(r . layout。活动_主);
downloadTxtButton=(Button)findViewById(r . id。BTN _ txt);
downloadtxtbutton。setonclicklistener(new DownloadTxtListener());
下载MP3 Button=(Button)findViewById(r . id。BTN _ MP3);
下载MP 3按钮。setonclicklistener(新下载MP3 listener());
}
//下载歌词文件按钮监听器
类DownloadTxtListener实现OnClickListener {
@覆盖
公共void onClick(视图五){
thread t=new downloadtxthread();
t。start();
系统。出去。println(' txt-');
}
}
//下载歌词文件线程
类DownloadTxtThread扩展线程{
@覆盖
公共无效运行(){
HttpDownloader HttpDownloader=new HttpDownloader();
字符串LRC=http下载程序。下载(urlStr _ txt);
系统。出去。println(LRC);
}
}
//下载MP3文件文件文件按钮监听器
类下载MP3监听器实现OnClickListener {
@覆盖
公共void onClick(视图五){
thread h=new down MP 3 thread();
h。start();
系统。出去。println(' MP3-');
}
}
//下载MP3文件文件文件线程
类向下MP3线程扩展线程{
@覆盖
公共无效运行(){
HttpDownloader HttpDownloader=new HttpDownloader();
int result=http下载程序。downfile(urlStr _ MP3,路径,文件名);
System.out.println(结果);
}
}
}
工具类:
HttpDownloader.java
包com。恰伊。utils
导入Java。io。缓冲阅读器;
导入Java。io。文件;
导入Java。io。io异常;
导入Java。io。inputstream
导入Java。io。inputstreamreader
导入Java。网。httpurl连接;
导入Java。网。malformedurexception
导入Java。网。网址;
公共类HttpDownloader {
私有URL url=null
/**
* 根据统一资源定位器下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容
* 1.创建一个统一资源定位器对象
* 2.通过统一资源定位器对象,创建一个HttpURLConnection对象
* 3.得到InputStram
* 4.从输入流当中读取数据
* @param urlStr
* @返回
*/
公共字符串下载(字符串urlStr) {
字符串缓冲区sb=新字符串缓冲区();
字符串行=空
BufferedReader buffer=null
尝试{
//创建一个统一资源定位器对象
url=新URL(urlStr);
//创建一个超文本传送协议(超文本传输协议的缩写)连接
http urlconnection URL conn=(http urlconnection)URL。打开连接();
//使用超正析象管(图片Orthicon)流读取数据
buffer=new buffered reader(new InputStreamReader(URL conn . getinputstream()));
while ((line=buffer.readLine())!=null) {
某人(somebody的简写)追加(行);
}
} catch(异常e) {
e。printstacktrace();
}最后{
尝试{
buffer.close().
} catch(异常e) {
e。printstacktrace();
}
}
归还某人。tostring();
}
/**
* 该函数返回整形-1:代表下载文件出错0:代表下载文件成功1:代表文件已经存在
*/
public int downFile(字符串urlStr,字符串路径,字符串文件名){
输入流输入流=空
尝试{
file utils file utils=new file utils();
if (fileUtils.isFileExist(路径文件名)){
返回1;
}否则{
inputStream=getInputStreamFromUrl(urlStr);
文件结果文件=文件实用程序。写入2 sdfrominput(路径,文件名,输入流);
if (resultFile==null) {
return-1;
}
}
} catch(异常e) {
e。printstacktrace();
return-1;
}最后{
尝试{
输入流。close();
} catch(异常e) {
e。printstacktrace();
}
}
返回0;
}
/**
* 根据统一资源定位器得到输入流
*
* @param urlStr
* @返回
* @ throws MalformedURLException
* @抛出IOException
*/
公共InputStream getinputstreamfrourl(字符串urlStr)
抛出MalformedURLException,IOException {
url=新URL(urlStr);
http urlconnection URL conn=(http urlconnection)URL。打开连接();
InputStream InputStream=URL conn . getinputstream();
返回输入流
}
}
FileUtils.java
包com。恰伊。utils
导入Java。io。文件;
导入Java。io。文件输出流;
导入Java。io。io异常;
导入Java。io。inputstream
导入Java。io。输出流;
导入安卓。OS。环境;
公共类文件工具{
私有字符串SDPATH
公共字符串getSDPATH() {
返回SDPATH
}
public FileUtils() {
//得到当前外部存储设备的目录
///SDCARD
SD路径=环境。getexternalsratedirectory()“/”;
}
/**
* 在南达科他州卡上创建文件
*
* @抛出IOException
*/
公共文件creatSDFile(字符串文件名)引发IOException {
文件文件=新文件(SDPATH文件名);
文件。创建新文件();
返回文件;
}
/**
* 在南达科他州卡上创建目录
*
* @param目录名
*/
公共文件creatSDDir(字符串目录名){
文件目录=新文件(SD路径目录名);
导演。mkdirs();
返回目录;
}
/**
* 判断南达科他州卡上的文件夹是否存在
*/
public boolean isFileExist(字符串文件名){
文件文件=新文件(SDPATH文件名);
返回文件。exists();
}
/**
* 将一个输入流里面的数据写入到南达科他州卡中
*/
公共文件write2SDFromInput(字符串路径,字符串文件名,输入流输入){
文件file=空
输出流输出=空
尝试{
creatSDDir(路径);
file=creatSDFile(路径文件名);
output=新文件输出流(文件);
字节缓冲区[]=新字节[4 * 1024];
while((input.read(buffer))!=-1){
输出.写入(缓冲);
}
输出。flush();
}
捕捉(异常e){
e。printstacktrace();
}
最后{
尝试{
输出。close();
}
捕捉(异常e){
e。printstacktrace();
}
}
返回文件;
}
}
如果不能下载,请先将窗子防火墙关闭。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。