【Android开发】网路编程及Internet应用-从指定网站上下载文件

news/2024/5/19 13:49:24/文章来源:https://blog.csdn.net/weixin_34061482/article/details/90687487
利用前面学过的HttpUrlConnection和文件输入输出流来完成从Android端下载指定站点的文件。

写一个编辑框,用来输入要下载文件的URL路径,下面一个按钮,点击实现文件下载
res/layout/main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/ll1"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><EditText android:id="@+id/url"android:layout_width="match_parent"android:layout_height="wrap_content"/><Button android:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="下载"/></LinearLayout>

界面如图


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() {@Overridepublic void onClick(View arg0) {//创建一个新线程用于从网络上获取文件new Thread(new Runnable(){@Overridepublic 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 blocke.printStackTrace();flag=false;} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();flag=false;}Message m=handler.obtainMessage();//获取一个Messagehandler.sendMessage(m);//发送消息}}).start();//开启线程}});//重写Handler的handleMessage()方法,根据flag标记变量flag的值不同显示不同的提示handler=new Handler(){@Overridepublic 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配置文件中加入网络访问权限和向内存卡写文件的权限:
<!-- SD卡写入权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 添加链接网络的权限 -->
<uses-permission android:name="android.permission.INTERNET"/>

运行实例,在下载地址编辑框中输入要下载文件的URL地址,单击下载按钮即可下载文件,下载成功后的文件保存在/sdcard/pictures/路径下。
注意,输入的URL路径必须真实存在且包含文件,不然就会下载失败。

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



下载结果如图




转载请注明出处:http://blog.csdn.net/acmman/article/details/46489385

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_764212.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站架构资料收集整理

1.系统概况图 图1.1 系统架构概况图 图1.2 较为完整的系统架构图 2.系统使用的主要技术 下列排名不分先后 2.1前端 JavaScript&#xff0c;html&#xff0c;css&#xff0c;silverlight&#xff0c;flash Jquery Javascript类库&#xff0c;用来简化html的操作&#xff0c;事件…

jquery.superslide.js插件网站焦点新闻图片选项卡自动切换效果代码

2019独角兽企业重金招聘Python工程师标准>>> jquery.superslide.js插件网站焦点新闻图片选项卡自动切换效果代码http://www.17sucai.com/pins/7117.html 转载于:https://my.oschina.net/u/1266171/blog/670036

Python之Scrapy爬虫(热门网站数据爬取)

第一关&#xff1a;猫眼电影排行TOP100信息爬取 代码&#xff1a; item.py文件 import scrapy class MaoyanItem(scrapy.Item):#********** Begin **********#name scrapy.Field()starts scrapy.Field()releasetime scrapy.Field()score scrapy.Field()#********** End…

2015年免费的25款 WordPress 网站模板

2015年 WordPress 插件和主题的数量继续在增长。这一年&#xff0c;我们可以期待WP主题引入一些新的技术&#xff0c;从背景&#xff0c;自适应响应式图像到从背景图片中提取主色。 本文包含25款最近发布的 WordPress 主题列表。这些主题都是优质&#xff0c;免费的&#xff0c…

wordpress和传统网站的加载性能优化

前言 网站的性能优化是非常重要的&#xff0c;直接决定了用户体验&#xff0c;和网站的负载能力。 Wordpress是一款非常受欢迎的Blog/CMS开源软件。全球数百万的网站使用wordpress搭建。 那么&#xff0c;如何让wordpress的性能、效能达到最佳&#xff0c;在减少服务器负荷的情…

Nginx——使用 Nginx 提升网站访问速度【转载+整理】

原文地址 本文是写于 2008 年&#xff0c;文中提到 Nginx 不支持 Windows 操作系统&#xff0c;但是现在它已经支持了&#xff0c;此外还支持 FreeBSD&#xff0c;Solaris&#xff0c;MacOS X~ Nginx&#xff08;“engine x”&#xff09; 是一个高性能的 HTTP 和反向代理服务器…

烂泥:Wordpress添加PHP测试页到网站根目录

本文首发于烂泥行天下&#xff0c;由秀依林枫提供友情赞助。 呵呵&#xff0c;对于我们这些非程序员来说wordpress的也是很神秘的。咱也对这个了解不多&#xff0c;不过今天为了添加一个测试页&#xff0c;搞的我很纠结。 尽管自己的博客也是wordpress写的&#xff0c;但是刚刚…

通过避免下列 10 个常见 ASP.NET 缺陷使网站平稳运行(转载)

LoadControl 和输出缓存会话和输出缓存Forms 身份验证票证生存期视图状态&#xff1a;无声的性能杀手SQL Server 会话状态&#xff1a;另一个性能杀手未缓存的角色配置文件属性序列化线程池饱和模拟和 ACL 授权不要完全信赖它 — 请设置数据库的配置文件&#xff01;ASP.NET 成…

让自己的网站或博客被百度收录的小技巧

刚开的博客通常情况下前一两个月是不太会被百度搜到的。 但是我们可以主动到搜索引擎网站上登记 &#xff0c;目前提供这种功能的网站很多&#xff0c;下面提供几个免费登录入口&#xff1a; Google免费登录入口&#xff1a;http://www.google.com/intl/zh-CN/add_url.html 百度…

【转】 详细介绍windows下使用python pylot进行网站压力测试

windows下使用python进行网站压力测试&#xff0c;有两个必不可少的程序需要安装&#xff0c;一个是python&#xff0c;另一个是pylot。python是一个安装软件&#xff0c;用来运行python程序&#xff0c;而pylot则是python的一个功能插件&#xff0c;作用是进行网站压力测试。本…

强迫症发 - 网站公安机关备案号图标矢量化

强迫症这毛病说发就发&#xff0c;今天又跟备案图标较上劲了&#xff01;把矢量化后的图标分享出来&#xff0c;给有同样症状的同学用...... 不明白为何我要折腾的同学请把网页放大看&#xff0c;能放多大就放多大&#xff01; 素材下载地址&#xff1a; http://www.stumbling…

如何为 Drupal 7 网站添加悬浮的反馈按钮?

最近有客户咨询我们要怎么为 Drupal 网站添加悬浮按钮&#xff0c;方便访客能够链接到反馈表单页面。很幸运&#xff0c;使用 Feedback Simple 模块可以很容易实现。在这篇短教程中&#xff0c;我将和大家分享如何添加链接到“反馈”页面的悬浮按钮。创建反馈页面使用 Webform …

iptables 防火墙 只允许某IP访问某端口、访问特定网站

2019独角兽企业重金招聘Python工程师标准>>> 1.先备份iptables # cp /etc/sysconfig/iptables /var/tmp 需要开80端口&#xff0c;指定IP和局域网 下面三行的意思&#xff1a; 先关闭所有的80端口 开启ip段192.168.1.0/24端的80口 开启ip段211.123.16.123/24端ip段的…

当你想对常用网站定制属于自己的颜色,然而又没人理你怎么办

自己动手定制的话&#xff0c;推荐两个chorme插件&#xff1a; 无事&#xff0c;举个栗子吧&#xff0c;刚好打开了知乎&#xff1a; 转载于:https://www.cnblogs.com/cynthia-wuqian/p/5319884.html

扒一扒HTTPS网站的内幕

215年6月&#xff0c;维基媒体基金会发布公告&#xff0c;旗下所有网站将默认开启HTTPS&#xff0c;这些网站中最为人所知的当然是全球最大的在线百科-维基百科。而更早时候的3月&#xff0c;百度已经发布公告&#xff0c;百度全站默认开启HTTPS。淘宝也默默做了全站HTTPS。 网…

电商总结(一)小型电商网站的架构

又是一年年底了&#xff0c;这一年&#xff0c;从传统软件行业进入到电商企业&#xff0c;算是一次转行了吧。刚开始&#xff0c;觉得电商网站没有什么技术含量&#xff0c;也没有什么门槛&#xff0c;都是一些现有的东西堆积木似的堆出来而已。然而&#xff0c;真正进入到这个…

delphi RAD Studio新版本及路线图 及官方网站 官方 版本发布时间

delphi RAD Studio Berlin 10.1 主要是FireMonkey 移动开发的改动&#xff0c;VCL确实没有多大变化。 http://docwiki.embarcadero.com/RADStudio/Berlin/en/Main_Page http://docwiki.embarcadero.com/RADStudio/Berlin/en/Whats_New EMB 官网地址资源 fix list for RAD Stud…

网站分页效果

为什么80%的码农都做不了架构师&#xff1f;>>> 网站分页效果函数 error_reporting(0); $host localhost; $user root; $pass 123; $dbname oa; $port 3306; $db new mysqli($host,$user,$pass,$dbname,$port); if($db->connect_error){die(mysql server …

网站漏洞修复与防护之CSRF跨站攻击

CSRF通俗来讲就是跨站伪造请求攻击&#xff0c;英文Cross-Site Request Forgery&#xff0c;在近几年的网站安全威胁排列中排前三&#xff0c;跨站攻击利用的是网站的用户在登陆的状态下&#xff0c;在用户不知不觉的情况下执行恶意代码以及执行网站的权限操作&#xff0c;CSRF…

写一个简单的网站文件管理器-框选

为了这个框选&#xff0c;耗费了无数脑细胞&#xff0c;牺牲了n多的封装特性 源码&#xff08;害人&#xff0c;下载请谨慎&#xff09;&#xff1a;https://files.cnblogs.com/files/allofalan/wnds.rar转载于:https://www.cnblogs.com/allofalan/p/9949410.html