`

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下载文件的小demo,带进度条更新及显示百分比,运行可用

    Android应用源码45套安卓源码合集.zip

    Android应用源码Android平台下通过HTTP协议实现断点续传下载.rar Android应用源码Hibernate4Android.rar Android应用源码http、udp、tcp网络交互组件.rar Android应用源码ListView实现的目录树结构.rar Android应用...

    android下载文件两种方法对比并附上一小型http服务器

    android利用http从网络上下载资源的方法, 内附两种下载方法,一种下下来的资源大小和源文件不等,⊙﹏⊙b汗,导致解析错误。另一种还是好使的,我拿一个apk做的实验(百思不得姐),下下来安装上木问题,自己找个...

    Android SDK中文开发文档 pdf 

    Android开发教程:Android SDK中文开发文档 pdf版电子书下载,介绍什么是 Android?Android特性及架构,Android应用程序框架和程序库,Android 运行库和Linux内核,如何安装配置Android SDK、建立应用程序签名、移植...

    Android实现表单上传文件

    Android的HttpURLConnections等并不能直接实现表单形式上传文件,必须另类实现。注册时一般是先利用表单上传头像图片得到头像在服务器的地址,再将得到的地址和其它注册信息提交。

    Android中http协议上传文件

    利用get和post方式上传文件 还有与底层相关的socket通信

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    在Android平台下利用WiFi技术实现

    若是想从电脑或其他手机上传资料到Android手机卡指定目录,那么先用浏览器访问http://192.168.0.100:2112/,进入需要放置文件的目录,点击左侧“文件/上传文件’,指定需要上传到手机的文件,稍后即可完成上传。...

    android开发入门与实战(下)

    17.1 Android原始码下载 17.2 实机测试 17.2.1 NeoFreeRunner介绍 17.2.2 烧录androidfs.jffs2 17.3 Android移植技术概论 17.3.1 Android底层技术的重要性 17.3.2 Android移植项目介绍 17.3.3 Android的技术优点

    Android开发--多线程下载加断点续传

    首先通过下载总线程数来划分文件的下载区域:利用int range = fileSize / threadCount;得到每一段下载量;每一段的位置是i * range到(i + 1) * rang - 1,注意最后一段的位置是到filesize - 1; 通过Http协议的...

    android httpconnection上传文件

    android中利用httpconnection上传文件。可以选择要上传文件的路径,上传网址

    Android高级编程--源代码

    因为没有了人为制造的障碍,所以Android开发人员可以自由地编写能够充分利用日益强大的手机硬件的应用程序。因此,对Android感兴趣的开发人员都把Google在2008年发布Android这一举措作为移动技术发展史上的一个非常...

    解包打包android内核system.img文件所需工具

    如果要修改代码,则需要把上面重新打包生成的apk文件,利用常规方法反编译后修改smali代码,例如插桩输入log信息。然后再回编译并重新签名。 最后一步:因为system.img中的apk是优化过的,apk主目录下是没有...

    Android 中利用SAX ,Dom,pull解析 XML 文件代码

    Android 中利用SAX ,Dom,pull解析 XML 文件代码 每种方式都介绍了代码,具体的文档在个人博客: http://blog.csdn.net/blueskydyliu/article/details/7055311 中介绍了。

    Android硬解码H264,AAC文件 Demo

    Android利用MediaCodec硬解码H264,AAC文件并播放Demo。相关博客:http://blog.csdn.net/a512337862/article/details/72629755和http://blog.csdn.net/a512337862/article/details/72629755

    Android代码-NetWrapper

    缓存完全由客户端自行控制(ACache),利用http请求头来完全屏蔽okhttp的缓存体系 上传和下载的进度回调(填了很大的坑) 指定请求回调的最短时间 自动登录和登录状态接口 post提交一个json数据 todo 1.下载策略 /** * ...

    Android手机利用USB线上网冲浪-文档

    手机用USB连接PC,通过PC上网的文档资料,整理前人的资料,并且尝试成功(在小米手机上),工具下载链接:http://download.csdn.net/detail/cofesun/3983398

    精通ANDROID 3(中文版)1/2

    1.6 利用Android源代码  1.7 本书的示例项目  1.8 小结  第2章 设置开发环境  2.1 设置环境  2.1.1 下载JDK 6  2.1.2 下载Eclipse 3.6  2.1.3 下载Android SDK  2.1.4 命令行窗口  2.1.5 安装ADT...

Global site tag (gtag.js) - Google Analytics