Android _文件下载

    Android 文件下载,在Android开发中很长用到,经常需要在应用程序中下载所需要的文件比如电子书,MP3格式的音乐文件,电影等。里面有个重要的类HttpURLconnection,它可以得到一个输入流,我在这里总结了一下,以后要用时可以直接拷贝,

代码分析:

  有两个工具类,HttpDownloader.java类中定义两个下载方法,download(String urlstr)下载纯文本文件,downfile(String urlStr,String path,String fileName)下载字节文件类。FileUtils.java类定义了写入sd卡的操作。Download.java类为主线程类,两个按钮,监听下载事件。

注意:

     在AndroidManifest.xml中添加网络访问权限

           <uses-permission android:name="android.permission.INTERNET"/>  

     在AndroidManifest.xml中加入访问SDCard的权限

           <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

代码:

   main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Android_hello word"
    />
<Button
	android:id="@+id/buttontxt"
	android:layout_width="300dp"
	android:layout_height="wrap_content"
	android:text="单击下载txt文件"
	/>
<Button
	android:id="@+id/buttonmp3"
	android:layout_width="300dp"
	android:layout_height="wrap_content"
	android:text="单击下载mp3文件"
	/>
</LinearLayout>

  Download.java

package com.example.download;

import android.os.Bundle;
import android.app.Activity;

import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Download extends Activity {
	private Button buttontxt;
	private Button buttonmp3;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_download);
		buttontxt = (Button) findViewById(R.id.buttontxt);
		buttontxt.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				// TODO Auto-generated method stub
				// TODO Auto-generated method stub
				// 创建一个匿名线程用于下载文件
				new Thread() {
					public void run() {
						HttpDownloader httpDownloader = new HttpDownloader();
						// 调用httpDownloader对象的重载方法download下载txt文件
						String txt = httpDownloader
								.download("http://www.baidu.com/");
						System.out.println(txt);
					}
				}.start();
			}

		});

		buttonmp3 = (Button) findViewById(R.id.buttonmp3);
		// 为buttonmp3添加单击事件监听器
		buttonmp3.setOnClickListener(new OnClickListener() {

			/*
			 * (non-Javadoc)
			 * 
			 * @see android.view.View.OnClickListener#onClick(android.view.View)
			 */
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				new Thread() {
					public void run() {
						try {
							HttpDownloader httpDownloader = new HttpDownloader();
							// 调用httpDownloader对象的重载方法download下载mp3文件
							int result = httpDownloader
									.downfile(
											"http://sjrjy.apkzz.net/201011/291354164ea84578066309.jpg",
											"Android/", "9.jpg");
							System.out.println(result);
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				}.start();

			}
		});
	}

}

  HttpDownloader.java

package com.example.download;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;


public class HttpDownloader {
  private URL url=null;
  public String download(String urlstr){
	  StringBuffer stringBuffer=new StringBuffer();
	  String line;
	  BufferedReader bufferedReader=null;
	  try {
		//创建一个URL对象
		url=new URL(urlstr);
		//得到一个HttpURLConnection对象
		HttpURLConnection httpsURLConnection=(HttpURLConnection) url.openConnection();
		// 得到IO流,使用IO流读取数据 
		bufferedReader=new BufferedReader(new InputStreamReader(httpsURLConnection.getInputStream()));
		while((line=bufferedReader.readLine())!=null){//一行一行的读
			stringBuffer.append(line);
		}
			
	} catch (Exception e) {
		e.printStackTrace();
	} 
	return stringBuffer.toString();
	  
  }

  // 该函数返回整形 -1:代表下载文件出错 ;0:代表下载文件成功; 1:代表文件已经存在 
 public int downfile(String urlStr,String path,String fileName){
	 InputStream inputstream=null;  
     FileUtils fileUtils=new FileUtils();  
     if(fileUtils.isExist(path+fileName))  
         return 1;  
     else  
     {  
         try {  
             inputstream=getFromUrl(urlStr);  
         } catch (IOException e) {  
             e.printStackTrace();  
         }  
         File file=fileUtils.writeToSDPATHFromInput(path, fileName, inputstream);  
         if(file!=null)  
             return 0;  
         else   
             return -1;  
     }  
	 
	 

	 
 }
//根据url字符串得到输入流  
public InputStream getFromUrl(String urlStr) throws IOException  
{         
    url=new URL(urlStr);              
    HttpURLConnection httpUrlConnection=(HttpURLConnection) url.openConnection();  
    InputStream input=httpUrlConnection.getInputStream();     
    return input;  
}  
} 

  FileUtils.java

package com.example.download;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.os.Environment;

public class FileUtils {
	private String SDPATH = null;

	public String getSDPATH() {
		return SDPATH;
	}

	public FileUtils() {
		// 获得当前外部存储设备SD卡的目录
		SDPATH = Environment.getExternalStorageDirectory() + "/";
	}

	// 创建文件
	public File createFile(String fileName) throws IOException {
		File file = new File(SDPATH + fileName);
		file.createNewFile();
		return file;
	}

	// 创建目录
	public File createDir(String fileName) throws IOException {
		File dir = new File(SDPATH + fileName);
		dir.mkdir();
		return dir;
	}

	// 判断文件是否存在
	public boolean isExist(String fileName) {
		File file = new File(SDPATH + fileName);
		return file.exists();
	}

	public File writeToSDPATHFromInput(String path, String fileName,
			InputStream inputstream) {
		File file = null;
		OutputStream outputstream = null;
		try {
			createDir(path);
			file = createFile(path + fileName);
			outputstream = new FileOutputStream(file);
			byte buffer[] = new byte[1024];
			// 将输入流中的内容先输入到buffer中缓存,然后用输出流写到文件中, /*真机测试,这段可能有问题
			/*while ((inputstream.read(buffer)) != -1) {
				outputstream.write(buffer);
			}*/
			//用这段
			int length;
			while((length=(inputstream.read(buffer))) >0){
			outputstream.write(buffer,0,length);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				inputstream.close();
				outputstream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return file;
	}

}


 


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值