`

Android开发 文件下载

 
阅读更多

back >>

声明:此代码来源于mars老师的视频教程,粘贴到这里,纯用于个人学习,方便查阅,无其它意图。

1. 使用http协议下载文件

    * 创建一个HttpURLConnection对象

        - HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();

    * 获得一个InputStream对象
        - urlConn.getInputStream()

    * 访问网络的权限
        - android.permission.INTENET


2. 将下载文件写入sdcard


    * 访问sd卡的步骤:
        - 得到当前设备SD卡的目录:Environment.getExternalStorageDirectory()
        - 访问SD卡的权限:android.permission.WRITE_EXTERNAL_STORAGE

 

3. 实例代码

 

    Download-->Activity

package mars.download;

import mars.utils.HttpDownloader;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Download extends Activity {
	private Button downloadTxtButton;
	private Button downloadMp3Button;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		downloadTxtButton = (Button) findViewById(R.id.downloadTxt);
		downloadTxtButton.setOnClickListener(new DownloadTxtListener());

		downloadMp3Button = (Button) findViewById(R.id.downloadMp3);
		downloadMp3Button.setOnClickListener(new DownloadMp3Listener());
	}

	class DownloadTxtListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			HttpDownloader httpDownloader = new HttpDownloader();
			String lrc = httpDownloader
					.download("http://9.125.233.**:8080/mp3/a1.lrc");
			System.out.println(lrc);
		}

	}

	class DownloadMp3Listener implements OnClickListener {

		@Override
		public void onClick(View v) {
			HttpDownloader httpDownloader = new HttpDownloader();
			int result = httpDownloader.downFile(
					"http://9.125.233.**:8080/mp3/a1.mp3", "voa/", "a1.mp3");
			System.out.println(result);
		}

	}
}

 

    HttpDownloader

package mars.utils;

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;

	/**
	 * 根据URL下载文件,前提是这个文件中的内容是文本,函数的返回值就是文件的内容
	 * 1.创建一个URL对象
	 * 2.通过URL对象,创建一个HttpURLConnection对象
	 * 3.得到InputStream
	 * 4.从InputStream中读取数据
	 */
	public String download(String urlStr) {
		StringBuffer sb = new StringBuffer();
		String line = null;
		BufferedReader buffer = null;
		try {
			// 创建一个URL对象
			url = new URL(urlStr);
			// 创建一个Http连接
			HttpURLConnection urlConn = (HttpURLConnection) url
					.openConnection();
			buffer = new BufferedReader(new InputStreamReader(urlConn
					.getInputStream()));
			// 使用IO流读取数据
			while ((line = buffer.readLine()) != null) {
				sb.append(line);
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				buffer.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return sb.toString();
	}

	/**
	 * 将下载的mp3文件写到sdcard
	 * 
	 * 该函数放回整型-1:代表下载文件出错 0:代表下载文件成功 1:代表文件已经存在
	 */

	public int downFile(String urlStr, String path, String fileName) {
		InputStream inputStream = null;
		try {
			FileUtils fileUtils = new FileUtils();

			if (fileUtils.isFileExist(path + fileName)) {
				return 1;
			} else {
				inputStream = getInputStreamFromUrl(urlStr);

				File resultFile = fileUtils.write2SDFromInput(path, fileName,
						inputStream);

				if (resultFile == null) {
					return -1;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			return -1;
		} finally {
			try {
				inputStream.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return 0;
	}

	private InputStream getInputStreamFromUrl(String urlStr) throws IOException {
		url = new URL(urlStr);
		HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
		InputStream inputStream = urlConn.getInputStream();
		return inputStream;
	}

}

 

    工具类FileUtils

 

package mars.utils;

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

import android.os.Environment;
/**
 * 访问sdcard的工具函数
 * */
public class FileUtils {

	private String SDPATH;

	public String getSDPATH() {
		return SDPATH;
	}
	public void setSDPATH(String sdpath) {
		SDPATH = sdpath;
	}
	public FileUtils() {
		// 得到当前外部存储设备的目录,即: /SDCARD
		SDPATH = Environment.getExternalStorageDirectory() + "/";
	}
	/**
	 * 在SD卡上创建文件
	 * 
	 */
	public File creatSDFile(String fileName) throws IOException {
		File file = new File(SDPATH + fileName);
		file.createNewFile();
		return file;
	}

	/**
	 * 在SD卡上创建目录
	 */
	public File createDir(String dirName) {
		File dir = new File(SDPATH + dirName);
		dir.mkdir();
		return dir;
	}

	/**
	 * 判断SD卡上的文件夹是否存在
	 */
	public boolean isFileExist(String fileName) {
		File file = new File(SDPATH + fileName);
		return file.exists();
	}

	/**
	 * 将一个InputStream 里面的数据写入到SD卡中
	 */
	public File write2SDFromInput(String path, String fileName,
			InputStream input) {
		File file = null;
		OutputStream output = null;

		try {
			createDir(path);//创建目录
			File f = creatSDFile(path + fileName);//创建文件
			output = new FileOutputStream(f);
			byte buffer[] = new byte[4 * 1024];
			while ((input.read(buffer)) != -1) {
				output.write(buffer);
			}
			System.out.println(path);
			file = new File(path);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				output.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return file;
	}
}

 

    AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="mars.download"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="4" />

    <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>
    <!--必须添加以下权限,才能实现下载操作-->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
 

 

 

分享到:
评论

相关推荐

    Android SDK 中文开发文档.pdf

    《Android SDK 中文开发文档》全面解析 Android SDK(Software Development Kit)是为开发者提供的一套工具集合,用于创建、测试和调试Android平台上的应用程序。这个文档主要面向使用Java语言进行开发的程序员,...

    Android 开发环境下载

    SDK是Android开发的核心部分,包含API库、工具和文档。在安装Android Studio时,通常会自动安装SDK。不过,也可以单独下载SDK Manager,通过它来选择和更新特定的Android平台版本和工具。 3. JDK (Java Development...

    Android 开发帮助文档 中文版

    《Android开发帮助文档中文版》是一份非常宝贵的资源,它为开发者提供了全面的Android平台开发指导,涵盖了从基础概念到高级特性的全方位讲解。这份文档是2016年12月21日的最新版本,确保了内容的时效性和准确性,...

    android开发文档范例

    android开发文档范例,移动开发,android

    安卓最全的开发文档(83MB)API下载

    对于新手来说,这是理解Android开发流程的重要起点。 4. **API变更日志**:在每个版本更新中,都会详细记录API的新增、删除或修改,这对于保持应用兼容性和利用新功能至关重要。 5. **示例代码**:文档中往往包含...

    android开发揭秘PDF

    第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 Android应用程序框架 1.2 OMS介绍 1.2.1 OPhone介绍 1.2.2 Widget介绍 1.3 小结 第2章 Android开发环境搭建 2.1 ...

    海思android开发文档

    海思Android开发文档是一份详尽的指南,旨在帮助开发者深入了解和优化在海思芯片平台上进行Android应用和系统的开发过程。这份文档涵盖了从基础概念到高级技术的各种主题,旨在为开发者提供一个全面的理解,以便充分...

    Android开发技术文档

    Android开发技术文档 Android开发技术文档 Android开发技术文档 Android开发技术文档

    android开发 文件上传下载 源码

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

    Android开发文档6.0(最新)-分卷1

    官网最新Android API开发文档,为不方便下载的亲打包上传,一共6个分卷,解压任意一个,文档无加密。文档为HTML类型。

    阿里巴巴Android开发手册正式版1.0.1

    《阿里巴巴 Android 开发手册》是阿里巴巴集团各大 Android 开发团队的集体智慧结晶和经验总结,将淘宝、天猫、闲鱼、钉钉等 App 长期开发迭代和优化经验系统地整理成册,以指导 Android 开发者更加高效、高质量地...

    android开发文档(英文版)

    本开发文档是最新的开发文档,android最新版本的。开发用的开发包里面应有竟有。如果你需要请下载吧。。学会分享,学会学习

    Android Framework 开发揭秘

    本书针对Android开发者,尤其是对系统级开发有深厚兴趣的工程师们,旨在揭示Android系统的神秘面纱,帮助读者从更高层次理解和掌握Android开发。 Android Framework层是Android系统的核心部分,它为应用程序层提供...

    Android开发文档合集

    包含《Android2.2中文API》《Android开发编程从入门到精通——Android程序员必备》《Android开发从入门到精通》《Android开发指南》《Android应用程序开发36技》《安卓开发新手入门基础教程》

    AndroidAPI文档完整版

    Android API文档是开发者在进行Android应用开发时的重要参考资料,它详尽地介绍了Android系统的各种接口、类库和功能。这份“Android API文档完整版”包含了官方文档和具有搜索功能的版本,使得开发者能够更高效地...

    Android 开发文档

    Android开发文档是广大Android开发者的重要参考资料,它包含了从基础到高级的所有Android开发知识。这份文档不仅包括了Android SDK的各种API接口、组件使用方法,还涵盖了Android应用设计的最佳实践和常见问题解决...

    android开发十个案例打包下载

    android移动开发10个案例源码: 1 图片浏览器 2 文件浏览器 3 通讯录 4 任务管理器 5 音乐播放器 6 天气预报 7 多媒体播放器 8 短信语音播报 9 手机远程监控 10 贪吃蛇游戏

    AndroidAPP开发入门教程.pdf

    Android APP 开发入门教程主要介绍了 Android APP 的开发流程,从 SDK 下载、开发环境搭建、代码编写、APP 打包等步骤一一讲解。本教程通过实践操作,带领读者一步步完成 Android APP 的开发,帮助读者快速掌握 ...

    安卓Android开发电子书大全 2018 (1/4)

    Android嵌入式智能操作系统是基于Linux内核和驱动的,对于HTC、华为等公司开发Android操作系统时,需要专门将Android移植到 特定硬件平台下,同时将必要的驱动进行编写及开发。...Google.Android开发入门与实战.rar

Global site tag (gtag.js) - Google Analytics