`

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

    Android 开发帮助文档 中文版

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

    Android SDK 中文开发文档.pdf

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

    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开发文档6.0(最新)-分卷1

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

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

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

    AndroidAPI文档完整版

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

    android开发文档(英文版)

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

    Android开发文档合集

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

    Android 开发文档

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

    android开发十个案例打包下载

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

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

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

    Android开发接口帮助文档

    这个名为"Android开发接口帮助文档"的.chm格式文件,是一个离线的、专为Android开发者设计的帮助文档。它包含了丰富的信息,帮助开发者快速查找并理解Android各类接口的继承关系、功能描述以及使用方法。CHM...

    android 开发笔记

    在Android开发中,了解如何正确使用和理解这类文档是至关重要的,因为它们往往包含了项目设置、依赖库的引入、编译步骤等关键信息。 其次,"新版Android开发教程&笔记--基础入门二.pdf"和"新版Android开发教程&笔记...

    android中文开发文档

    感谢android中文翻译组的付出,这是网上找的比较全面的中文开发文档,留着自用, 有需要的可以下载, --- 注:下载下来打开文档如果发现只有目录,没有内容, 请右键-&gt;属性-&gt;解除锁定,再次打开就OK了, 或者 请自行百度 :chm...

Global site tag (gtag.js) - Google Analytics