博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android开发】网路编程及Internet应用-从指定网站上下载文件
阅读量:7032 次
发布时间:2019-06-28

本文共 3422 字,大约阅读时间需要 11 分钟。

利用前面学过的HttpUrlConnection和文件输入输出流来完成从Android端下载指定站点的文件。
写一个编辑框,用来输入要下载文件的URL路径,下面一个按钮,点击实现文件下载
res/layout/main.xml:
界面如图
MainActivity:
package com.example.test;    import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;  public class MainActivity extends Activity{  	 private EditText UrlEdit;//获取一个输入url的编辑框对象 	 private Button button;//声明一个"发送POST请求"按钮对象	 private Handler handler;//声明一个Handler对象	 private boolean flag=false;//标记是否成功的变量    @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);                 UrlEdit=(EditText)findViewById(R.id.url);        button=(Button)findViewById(R.id.button);        //为"下载"按钮添加单击事件监听        button.setOnClickListener(new OnClickListener() {						@Override			public void onClick(View arg0) {				//创建一个新线程用于从网络上获取文件				new Thread(new Runnable(){					@Override					public void run() {						try {							String sourceUrl=UrlEdit.getText().toString();//获取下载地址							URL url=new URL(sourceUrl);//创建下载地址对应的URL对象							//创建一个连接							HttpURLConnection conn=(HttpURLConnection)url.openConnection();							InputStream is=conn.getInputStream();//获取输入流对象							if(is!=null){								String expandName=sourceUrl.substring(sourceUrl.lastIndexOf(".")+1,										sourceUrl.length()).toLowerCase();//获取文件的拓展名								String fileName=sourceUrl.substring(sourceUrl.lastIndexOf("/")+1,										sourceUrl.lastIndexOf("."));//获取文件名								//在SD卡上创建文件								File file=new File("/sdcard/pictures/"+fileName+"."+expandName);								FileOutputStream fos=new FileOutputStream(file);//创建一个文件输出流对象								byte buf[]=new byte[1024];//创建一个字节数组								//读取文件到输入流对象中								while(true){									int numread=is.read(buf);									if(numread<=0){										break;									}else{										fos.write(buf, 0, numread);									}								}							}							is.close();//关闭输入流对象							conn.disconnect();//关闭连接							flag=true;						} catch (MalformedURLException e) {							// TODO Auto-generated catch block							e.printStackTrace();							flag=false;						} catch (IOException e) {							// TODO Auto-generated catch block							e.printStackTrace();							flag=false;						}						Message m=handler.obtainMessage();//获取一个Message						handler.sendMessage(m);//发送消息					}									}).start();//开启线程			}					});                //重写Handler的handleMessage()方法,根据flag标记变量flag的值不同显示不同的提示        handler=new Handler(){			@Override			public void handleMessage(Message msg) {				if(flag){					Toast.makeText(MainActivity.this, "文件下载完成!", 							Toast.LENGTH_SHORT).show();				}else{					Toast.makeText(MainActivity.this, "文件下载失败!", 							Toast.LENGTH_SHORT).show();				}				super.handleMessage(msg);			}        	        };	}   }
最后记得在AndroidManifest.xml配置文件中加入网络访问权限和向内存卡写文件的权限:
运行实例,在下载地址编辑框中输入要下载文件的URL地址,单击下载按钮即可下载文件,下载成功后的文件保存在/sdcard/pictures/路径下。
注意,输入的URL路径必须真实存在且包含文件,不然就会下载失败。

这里我拿http://pics.sc.chinaz.com/files/pic/pic9/201505/apic12027.jpg做实验,里面是一个图片文件,如图

下载结果如图

转载请注明出处:

你可能感兴趣的文章
mongodb常见管理命令
查看>>
1.7 以函数对象取代函数
查看>>
Vue过渡效果之JS过渡
查看>>
Android项目实战(三):实现第一次进入软件的引导页
查看>>
Web Service基础——基础概念
查看>>
Linux2.4文件系统中vfsmount、安装点的dentry、设备的dentry之间的关系【转】
查看>>
POJ 1201 Intervals
查看>>
JAVA訪问URL
查看>>
APP接口基础学习一
查看>>
设计模式 策略模式 以角色游戏为背景
查看>>
【转】CSS和SVG中的剪切——clip-path属性和<clipPath>元素
查看>>
【C语言入门教程】5.4 递归
查看>>
UVALive 6915 Leveling Ground 倍增RMQ
查看>>
Inside ARC — to see the code inserted by the compiler
查看>>
云中气象 有备而来
查看>>
4.dubbo-demo+简易监控中心安装+管理控制台安装
查看>>
读书笔记《集体智慧编程》Chapter 4 : Searching and Ranking
查看>>
jquery form 插件 分类: JavaScript ...
查看>>
php二维数组访问
查看>>
用Shell实现俄罗斯方块代码(Tetris.sh)
查看>>