Android利用Http下载文件
一、场景
下载存文本文件和下载如mp3等大容量的文件
界面
二、代码编写
1.AndroidMainfest.xml中配置
主要是解决网络权限和写SDCard的权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="linys.download" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Download" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<!-- 访问网络和操作SD卡 加入的两个权限配置 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
2.Activity编写
利用Http协议下载文件并存储到SDCard
1.创建一个URL对象
2.通过URL对象,创建一个HttpURLConnection对象
3.得到InputStream
4.从InputStream当中读取数据
存到SDCard
1.取得SDCard路径
2.利用读取大文件的IO读法,读取文件
package linys.download;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/**
*
* @Project: Android_MyDownload
* @Desciption: 利用Http协议下载文件并存储到SDCard
1.创建一个URL对象
2.通过URL对象,创建一个HttpURLConnection对象
3.得到InputStream
4.从InputStream当中读取数据
存到SDCard
1.取得SDCard路径
2.利用读取大文件的IO读法,读取文件
*
* @Author: LinYiSong
* @Date: 2011-3-25~2011-3-25
*/
public class MyDownload extends Activity {
private Button downFileBtn;
private Button downMP3Btn;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
downFileBtn=(Button)this.findViewById(R.id.downFile);
downMP3Btn=(Button)this.findViewById(R.id.downMP3);
downFileBtn.setOnClickListener(new DownFileClickListener());
downMP3Btn.setOnClickListener(new DownMP3ClickListener());
}
/**
*
* @Project: Android_MyDownload
* @Desciption: 只能读取文本文件,读取mp3文件会出现内存溢出现象
* @Author: LinYiSong
* @Date: 2011-3-25~2011-3-25
*/
class DownFileClickListener implements OnClickListener{
@Override
public void onClick(View v) {
String urlStr="http://172.17.54.91:8080/download/down.txt";
try {
/*
* 通过URL取得HttpURLConnection
* 要网络连接成功,需在AndroidMainfest.xml中进行权限配置
* <uses-permission android:name="android.permission.INTERNET" />
*/
URL url=new URL(urlStr);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
//取得inputStream,并进行读取
InputStream input=conn.getInputStream();
BufferedReader in=new BufferedReader(new InputStreamReader(input));
String line=null;
StringBuffer sb=new StringBuffer();
while((line=in.readLine())!=null){
sb.append(line);
}
System.out.println(sb.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
*
* @Project: Android_MyDownload
* @Desciption: 读取任意文件,并将文件保存到手机SDCard
* @Author: LinYiSong
* @Date: 2011-3-25~2011-3-25
*/
class DownMP3ClickListener implements OnClickListener{
@Override
public void onClick(View v) {
String urlStr="http://172.17.54.91:8080/download/1.mp3";
String path="file";
String fileName="2.mp3";
OutputStream output=null;
try {
/*
* 通过URL取得HttpURLConnection
* 要网络连接成功,需在AndroidMainfest.xml中进行权限配置
* <uses-permission android:name="android.permission.INTERNET" />
*/
URL url=new URL(urlStr);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
//取得inputStream,并将流中的信息写入SDCard
/*
* 写前准备
* 1.在AndroidMainfest.xml中进行权限配置
* <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
* 取得写入SDCard的权限
* 2.取得SDCard的路径: Environment.getExternalStorageDirectory()
* 3.检查要保存的文件上是否已经存在
* 4.不存在,新建文件夹,新建文件
* 5.将input流中的信息写入SDCard
* 6.关闭流
*/
String SDCard=Environment.getExternalStorageDirectory()+"";
String pathName=SDCard+"/"+path+"/"+fileName;//文件存储路径
File file=new File(pathName);
InputStream input=conn.getInputStream();
if(file.exists()){
System.out.println("exits");
return;
}else{
String dir=SDCard+"/"+path;
new File(dir).mkdir();//新建文件夹
file.createNewFile();//新建文件
output=new FileOutputStream(file);
//读取大文件
byte[] buffer=new byte[4*1024];
while(input.read(buffer)!=-1){
output.write(buffer);
}
output.flush();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
output.close();
System.out.println("success");
} catch (IOException e) {
System.out.println("fail");
e.printStackTrace();
}
}
}
}
}
- 大小: 14.5 KB
分享到:
相关推荐
在Android平台上,将网页内容通过HTTP协议下载到指定文件夹是一项常见的任务,尤其在离线浏览、数据缓存或者后台更新资源的场景中。HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,它允许客户端(如...
在Android开发中,文件下载是一项常见的任务,尤其是对于大型应用或者资源更新时,断点续传功能显得尤为重要。断点续传技术允许用户在下载过程中因网络中断或设备关闭后,从上次中断的位置继续下载,提高了用户体验...
在Android中,我们可以利用它来下载文件。以下是一个简单的示例: 1. 首先,获取网络URL并建立连接: ```java URL url = new URL("http://example.com/file.zip"); HttpURLConnection connection = ...
本篇文章将详细讲解如何利用Retrofit实现文件的上传与下载功能。 首先,我们需要理解Retrofit的基本用法。Retrofit允许我们通过注解定义网络请求接口,这些接口可以是GET、POST、PUT等HTTP方法。例如,定义一个上传...
在Android平台上,实现文件的多线程断点下载是一项常见的任务,这有助于提高下载速度并允许用户在中断后继续未完成的下载。以下是一个详细解释这个过程的关键知识点: 1. **HTTP请求与响应**: - HTTP是互联网上...
在Android开发中,文件的上传和下载是常见的功能需求,特别是在构建移动应用时,如社交应用、云存储服务等。本资源提供了android开发中的文件上传和下载的源码,可以帮助开发者快速理解和实现这一功能。 一、文件...
本文将深入探讨如何在Android 3.0及以上版本中,利用自建的HTTPD服务器进行文件下载。 首先,我们要了解HTTPD服务器的基本概念。HTTPD是HTTP服务器的简称,它负责接收HTTP请求,并返回相应的HTTP响应。在这个场景下...
在本案例中,我们将讨论如何在Android JNI中使用libcurl库来执行HTTP请求和文件下载。 libcurl是一个流行的开源库,用于处理各种网络协议,包括HTTP、HTTPS等。它提供了丰富的API,可以在多种编程语言中使用,包括C...
本教程将详细讲解如何利用Android的`Service` 组件来实现文件下载功能。 一、Android Service 概述 `Service` 是Android四大组件之一(Activity、BroadcastReceiver、ContentProvider、Service),它主要用于执行长...
综上所述,"android webview实现自身下载文件自动保存SDCARD"主要是通过设置WebViewClient,拦截文件下载请求,然后利用DownloadManager服务将文件保存到SDCARD的过程。这个功能对于那些希望在自己的应用程序内提供...
本篇文章将深入探讨如何在Android环境中利用HTTP进行文件传输,并涉及与TCP/IP协议的相关知识。 首先,理解HTTP协议是至关重要的。HTTP是一种无状态的应用层协议,它规定了客户端(通常是Web浏览器)与服务器之间...
在Android应用开发中,文件下载是一项常见的任务,尤其是在处理大文件时,为了提高效率和用户体验,通常会采用多线程和断点续传的技术。本文将深入探讨Android平台下的多线程断点文件下载和暂停功能的实现原理及源码...
### Android 文件下载进度条的实现 #### 背景与目的 在移动应用开发中,尤其是在Android平台上,文件下载是一项非常常见的功能需求。对于大型文件(如图片、视频等),提供一个进度条来显示下载进度不仅可以提升...
在Android开发中,进行大文件下载时,为了提高效率并充分利用设备资源,通常会采用多线程下载技术。此外,为了提升用户体验,断点续传功能也显得尤为重要,尤其是在网络不稳定或者用户中断下载后,可以从上次停止的...
断点下载的核心原理是利用HTTP协议中的Range请求头。当用户开始一个新的下载任务时,服务器会返回一个包含文件总大小的响应头(Content-Length)。在下载过程中,客户端(即Android应用)会保存当前已下载的文件长度...
在Android平台上,文件的上传和下载是常见的操作,尤其在移动应用中,用户可能需要将本地数据同步到云端,或者从服务器获取数据。本教程主要涵盖两个方面:Android手机文件的上传和下载,以及如何使用XAMPP搭建后端...
在Android开发中,多线程文件断点下载是一项重要的技术,尤其对于大文件的下载,它能显著提高下载效率并提供更好的用户体验。断点下载允许用户在任何时间暂停下载,并在之后从停止的地方继续,而不会丢失已下载的...
在Android开发中,OkHttp和RxJava的结合可以实现高效的网络请求处理,其中包括断点下载功能。断点下载是指在用户暂停下载后,可以从上次停止的位置继续下载,避免了重新开始下载大文件的不便。本篇文章将深入探讨...