`

Android利用Http下载文件

阅读更多

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
分享到:
评论
5 楼 nanfei 2014-10-30  
运行没看到反应~
4 楼 jebai0521 2014-10-22  
学习了,有点错误!
3 楼 strong46066999 2011-11-12  
哥哥,你这代码,1楼老兄,已经说了,文件存储的时候,会多出很多无用的字节,
小弟不才,修修改改,是这样的。

byte[] buffer = new byte[4 * 1024];
int len;
while ((len=input.read(buffer))!= -1) {
output.write(buffer,0,len);
}
2 楼 dampce032 2011-03-31  
只是设定下缓冲的大小,你可以修改,和文件的大小无关
1 楼 renwolang521 2011-03-30  
引用
byte[] buffer=new byte[4*1024];  
while(input.read(buffer)!=-1){  
    output.write(buffer);  
}  
output.flush();



读取流的时候,读取多少length 写多少length,对吧?
你自己试过吗?难道的文件长度 都刚好是 4*1024的整数倍?

相关推荐

    android利用http协议把网页内容下载到指定文件夹

    在Android平台上,将网页内容通过HTTP协议下载到指定文件夹是一项常见的任务,尤其在离线浏览、数据缓存或者后台更新资源的场景中。HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,它允许客户端(如...

    Android文件下载(实现断点续传)

    在Android开发中,文件下载是一项常见的任务,尤其是对于大型应用或者资源更新时,断点续传功能显得尤为重要。断点续传技术允许用户在下载过程中因网络中断或设备关闭后,从上次中断的位置继续下载,提高了用户体验...

    android从网络上下载文件

    在Android中,我们可以利用它来下载文件。以下是一个简单的示例: 1. 首先,获取网络URL并建立连接: ```java URL url = new URL("http://example.com/file.zip"); HttpURLConnection connection = ...

    android retrofit上传与下载文件

    本篇文章将详细讲解如何利用Retrofit实现文件的上传与下载功能。 首先,我们需要理解Retrofit的基本用法。Retrofit允许我们通过注解定义网络请求接口,这些接口可以是GET、POST、PUT等HTTP方法。例如,定义一个上传...

    android Http实现文件多线程断点下载

    在Android平台上,实现文件的多线程断点下载是一项常见的任务,这有助于提高下载速度并允许用户在中断后继续未完成的下载。以下是一个详细解释这个过程的关键知识点: 1. **HTTP请求与响应**: - HTTP是互联网上...

    android开发 文件上传下载 源码

    在Android开发中,文件的上传和下载是常见的功能需求,特别是在构建移动应用时,如社交应用、云存储服务等。本资源提供了android开发中的文件上传和下载的源码,可以帮助开发者快速理解和实现这一功能。 一、文件...

    Android3.0从自己建立的httpd下载文件

    本文将深入探讨如何在Android 3.0及以上版本中,利用自建的HTTPD服务器进行文件下载。 首先,我们要了解HTTPD服务器的基本概念。HTTPD是HTTP服务器的简称,它负责接收HTTP请求,并返回相应的HTTP响应。在这个场景下...

    android jni使用curl进行http请求和文件下载

    在本案例中,我们将讨论如何在Android JNI中使用libcurl库来执行HTTP请求和文件下载。 libcurl是一个流行的开源库,用于处理各种网络协议,包括HTTP、HTTPS等。它提供了丰富的API,可以在多种编程语言中使用,包括C...

    Android-AndroidService下载文件

    本教程将详细讲解如何利用Android的`Service` 组件来实现文件下载功能。 一、Android Service 概述 `Service` 是Android四大组件之一(Activity、BroadcastReceiver、ContentProvider、Service),它主要用于执行长...

    android webview实现自身下载文件自动保存SDCARD

    综上所述,"android webview实现自身下载文件自动保存SDCARD"主要是通过设置WebViewClient,拦截文件下载请求,然后利用DownloadManager服务将文件保存到SDCARD的过程。这个功能对于那些希望在自己的应用程序内提供...

    android 文件传输 http

    本篇文章将深入探讨如何在Android环境中利用HTTP进行文件传输,并涉及与TCP/IP协议的相关知识。 首先,理解HTTP协议是至关重要的。HTTP是一种无状态的应用层协议,它规定了客户端(通常是Web浏览器)与服务器之间...

    Android多线程断点文件下载和暂停源码

    在Android应用开发中,文件下载是一项常见的任务,尤其是在处理大文件时,为了提高效率和用户体验,通常会采用多线程和断点续传的技术。本文将深入探讨Android平台下的多线程断点文件下载和暂停功能的实现原理及源码...

    \Android文件下载进度条的实现.txt

    ### Android 文件下载进度条的实现 #### 背景与目的 在移动应用开发中,尤其是在Android平台上,文件下载是一项非常常见的功能需求。对于大型文件(如图片、视频等),提供一个进度条来显示下载进度不仅可以提升...

    Android多线程文件夹下载及断点续传

    在Android开发中,进行大文件下载时,为了提高效率并充分利用设备资源,通常会采用多线程下载技术。此外,为了提升用户体验,断点续传功能也显得尤为重要,尤其是在网络不稳定或者用户中断下载后,可以从上次停止的...

    Android断点下载示例

    断点下载的核心原理是利用HTTP协议中的Range请求头。当用户开始一个新的下载任务时,服务器会返回一个包含文件总大小的响应头(Content-Length)。在下载过程中,客户端(即Android应用)会保存当前已下载的文件长度...

    android手机文件上传和下载

    在Android平台上,文件的上传和下载是常见的操作,尤其在移动应用中,用户可能需要将本地数据同步到云端,或者从服务器获取数据。本教程主要涵盖两个方面:Android手机文件的上传和下载,以及如何使用XAMPP搭建后端...

    android 多线程文件断点下载

    在Android开发中,多线程文件断点下载是一项重要的技术,尤其对于大文件的下载,它能显著提高下载效率并提供更好的用户体验。断点下载允许用户在任何时间暂停下载,并在之后从停止的地方继续,而不会丢失已下载的...

    Android OkHttp断点下载

    在Android开发中,OkHttp和RxJava的结合可以实现高效的网络请求处理,其中包括断点下载功能。断点下载是指在用户暂停下载后,可以从上次停止的位置继续下载,避免了重新开始下载大文件的不便。本篇文章将深入探讨...

Global site tag (gtag.js) - Google Analytics