Android利用Http下载文件

一、场景

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

界面

二、代码编写

1.AndroidMainfest.xml中配置

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

Java代码  
  1. "1.0" encoding="utf-8"?>
  2. "http://schemas.android.com/apk/res/android"
  3. package="linys.download" android:versionCode="1" android:versionName="1.0">
  4. "8" />
  5. <application android:icon="@drawable/icon" android:label="@string/app_name">
  6. ".Download" android:label="@string/app_name">
  7. <action android:name="android.intent.action.MAIN" />
  8. "android.intent.category.LAUNCHER" />
  9. </activity>
  10. <!-- 访问网络和操作SD卡 加入的两个权限配置 -->
  11. "android.permission.INTERNET" />
  12. "android.permission.WRITE_EXTERNAL_STORAGE" />
  13. </manifest>

2.Activity编写

利用Http协议下载文件并存储到SDCard
    1.创建一个URL对象
    2.通过URL对象,创建一个HttpURLConnection对象
    3.得到InputStream
    4.从InputStream当中读取数据
    存到SDCard
    1.取得SDCard路径
    2.利用读取大文件的IO读法,读取文件

Java代码  
  1. package linys.download;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.InputStreamReader;
  8. import java.io.OutputStream;
  9. import java.net.HttpURLConnection;
  10. import java.net.MalformedURLException;
  11. import java.net.URL;
  12. import android.app.Activity;
  13. import android.os.Bundle;
  14. import android.os.Environment;
  15. import android.view.View;
  16. import android.view.View.OnClickListener;
  17. import android.widget.Button;
  18. /**
  19. *
  20. * @Project: Android_MyDownload
  21. * @Desciption: 利用Http协议下载文件并存储到SDCard
  22. 1.创建一个URL对象
  23. 2.通过URL对象,创建一个HttpURLConnection对象
  24. 3.得到InputStream
  25. 4.从InputStream当中读取数据
  26. 存到SDCard
  27. 1.取得SDCard路径
  28. 2.利用读取大文件的IO读法,读取文件
  29. *
  30. * @Author: LinYiSong
  31. * @Date: 2011-3-25~2011-3-25
  32. */
  33. public class MyDownload extends Activity {
  34. private Button downFileBtn;
  35. private Button downMP3Btn;
  36. /** Called when the activity is first created. */
  37. @Override
  38. public void onCreate(Bundle savedInstanceState) {
  39. super.onCreate(savedInstanceState);
  40. this.findViewById(R.id.downFile);
  41. this.findViewById(R.id.downMP3);
  42. downFileBtn.setOnClickListener(new DownFileClickListener());
  43. new DownMP3ClickListener());
  44. /**
  45. *
  46. * @Project: Android_MyDownload
  47. * @Desciption: 只能读取文本文件,读取mp3文件会出现内存溢出现象
  48. * @Author: LinYiSong
  49. * @Date: 2011-3-25~2011-3-25
  50. */
  51. class DownFileClickListener implements OnClickListener{
  52. @Override
  53. public void onClick(View v) {
  54. "http://172.17.54.91:8080/download/down.txt";
  55. try {
  56. /*
  57. * 通过URL取得HttpURLConnection
  58. * 要网络连接成功,需在AndroidMainfest.xml中进行权限配置
  59. * <uses-permission android:name="android.permission.INTERNET" />
  60. */
  61. new URL(urlStr);
  62. //取得inputStream,并进行读取
  63. BufferedReader in=new BufferedReader(new InputStreamReader(input));
  64. null;
  65. new StringBuffer();
  66. while((line=in.readLine())!=null){
  67. }
  68. catch (MalformedURLException e) {
  69. } catch (IOException e) {
  70. }
  71. }
  72. /**
  73. *
  74. * @Project: Android_MyDownload
  75. * @Desciption: 读取任意文件,并将文件保存到手机SDCard
  76. * @Author: LinYiSong
  77. * @Date: 2011-3-25~2011-3-25
  78. */
  79. class DownMP3ClickListener implements OnClickListener{
  80. @Override
  81. public void onClick(View v) {
  82. "http://172.17.54.91:8080/download/1.mp3";
  83. "file";
  84. "2.mp3";
  85. null;
  86. try {
  87. /*
  88. * 通过URL取得HttpURLConnection
  89. * 要网络连接成功,需在AndroidMainfest.xml中进行权限配置
  90. * <uses-permission android:name="android.permission.INTERNET" />
  91. */
  92. new URL(urlStr);
  93. //取得inputStream,并将流中的信息写入SDCard
  94. /*
  95. * 写前准备
  96. * 1.在AndroidMainfest.xml中进行权限配置
  97. * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  98. * 取得写入SDCard的权限
  99. * 2.取得SDCard的路径: Environment.getExternalStorageDirectory()
  100. * 3.检查要保存的文件上是否已经存在
  101. * 4.不存在,新建文件夹,新建文件
  102. * 5.将input流中的信息写入SDCard
  103. * 6.关闭流
  104. */
  105. "";
  106. "/"+path+"/"+fileName;//文件存储路径
  107. File file=new File(pathName);
  108. if(file.exists()){
  109. "exits");
  110. return;
  111. else{
  112. "/"+path;
  113. new File(dir).mkdir();//新建文件夹
  114. //新建文件
  115. new FileOutputStream(file);
  116. //读取大文件
  117. byte[] buffer=new byte[4*1024];
  118. while(input.read(buffer)!=-1){
  119. }
  120. }
  121. catch (MalformedURLException e) {
  122. } catch (IOException e) {
  123. }finally{
  124. try {
  125. System.out.println("success");
  126. catch (IOException e) {
  127. "fail");
  128. }
  129. }
  130. }
  131. }

Android利用Http下载文件的更多相关文章

  1. 教你如何在 Android 使用多线程下载文件

    # 教你如何在 Android 使用多线程下载文件 前言 在 Android 日常开发中,我们会经常遇到下载文件需求,这里我们也可以用系统自带的 api DownloadManager 来解决这个问题 ...

  2. Android 通过SOCKET下载文件的方法

    本文实例讲述了Android通过SOCKET下载文件的方法.分享给大家供大家参考,具体如下: 服务端代码 import java.io.BufferedInputStream; import java ...

  3. Android之访问下载文件

    1.SD卡操作类 FileUtils.java package com.example.mars_1500_download; import java.io.File; import java.io. ...

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

    想把文件保存到SD卡中,一定要知道SD卡的路径,获取SD卡路径: Environment.getExternalStorageDirectory() 另外,在保存之前要判断SD卡是否已经安装好,并且可 ...

  5. Android OkHttp + Retrofit 下载文件与进度监听

    本文链接 下载文件是一个比较常见的需求.给定一个url,我们可以使用URLConnection下载文件. 使用OkHttp也可以通过流来下载文件. 给OkHttp中添加拦截器,即可实现下载进度的监听功 ...

  6. android多线程断点续传下载文件

    一.目标 1.多线程抢占服务器资源下载. 2.断点续传. 二.实现思路. 假设分为三个线程: 1.各个线程分别向服务器请求文件的不同部分. 这个涉及Http协议,可以在Header中使用Range参数 ...

  7. android NDK的下载-文件太大

    需要FQ,建议使用VPN,下载前准备点时间配置网络环境.我的百度网盘好像有~~不过忘记地址了,改天共享,或者私聊我. 2015.4 Android 5.1 Android Studio https:/ ...

  8. Android根据URL下载文件保存到SD卡

    //下载具体操作 private void download() { try { URL url = new URL(downloadUrl); //打开连接 URLConnection conn = ...

  9. Android中如何下载文件并显示下载进度

    原文地址:http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1125/2057.html 这里主要讨论三种方式:AsyncTask.Serv ...

随机推荐

  1. 改写Form的submit

    表单的一些应用常识: 1.在用户第一次提交完表单后应防止用户不耐烦而多次点击submit按钮,需要在onsubmit事件中制止用户的重复行为. 2.不要简单粗暴的用reset()重置表单,如果用户不想 ...

  2. ZOJ3560 Re:the Princess(高斯消元法)

    题目要读很久才能理解它的意思和笑点(如果你也看过那个笑话的话),读懂之后就会发现是一个高斯消元法的题目,对于我来说难点不在高斯消元,而在于字符串处理.先来说说题意吧: 总共有n个人,n个人都会有一段话 ...

  3. POJ 2017

    #include<iostream> #include<stdio.h> using namespace std; int main() { //freopen("t ...

  4. iOS多线程的初步研究(二)-- 锁

    谈到线程同步,一般指如何对线程间共享数据的同步读写,如何避免混乱的读写结果.一个基本的解决办法就是使用锁(LOCK). iOS提供多种同步锁的类和方法,这里介绍下基本用法. 1. NSLock:最基本 ...

  5. 利用PHP SOAP实现WEB SERVICE

    php有两个扩展可以实现web service,一个是NuSoap,一个是php 官方的soap扩展,由于soap是官方的,所以我们这里以soap来实现web service.由于默认是没有打开soa ...

  6. ExtJs之Ext.form.field.TimePicker DatePicker组合框

    <!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...

  7. pku 1703(种类并查集)

    题目链接:http://poj.org/problem?id=1703 思路;个人觉得本质上还是和带权并查集一样的,只不过多了一个MOD操作,然后就是向量关系图稍微改动一下就变成种类并查集了,对于本题 ...

  8. unity Transform Find 的用法!!!

    用法: Transform Find(String name) 1.查找名为name的(transform.gameObject)直接子物体并返回该子物体的Transform属性.不能是孙子物体或更低 ...

  9. Jlink更新新固件USB连接不上的问题

    采购新买了一个jlink,在调试过程中发现不能使用.拿到手后对jink上电以后,发现灯不亮,到网上查了一下估计是固件损坏的原因,经过一番摸索从新更新了固件,然后可以正常使用了,下面说一下步骤: 新版的 ...

  10. TWinControl与TControl的覆盖函数(TWinControl对TControl的10个消息覆盖函数,17个覆盖函数,私有虚函数仍可多态)

    手工找出来,对比一下,有助于VCL框架的理解.----------------------------------------------------------------------------- ...