Android之文件下载
来源:互联网 发布:adobe ae cc 2015 mac 编辑:程序博客网 时间:2024/04/28 08:45
在手机上下载一些文件是很常见的,比如下载一本书,下载一首Mp3等等,下面就来通过一个实例来简单介绍一下文件的下载。
文件下载实现的基本步骤:创建一个HttpURLConnection对象,获得一个InputStream对象,设置网络访问权限。
在这个实例中实现歌词和歌曲MP3的下载。
首先我们先看一下布局文件,很简单,只有两个Button控件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/downloadText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="downloadText"/> <Button android:id="@+id/downloadMp3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="downloadMp3"/> </LinearLayout>
下载文件需要用到两个utils工具类,一个工具类(HttpDownloader.java)是用来下载文件用的,另一个(FileUtils.java)是用来将下载的文件写入到SD卡中:
/Download/src/cn/android/sword/utils/HttpDownloader.java
package cn.android.sword.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.MalformedURLException;import java.net.URL;import android.util.Log;public class HttpDownloader {private final static String SWORD="SWORD";public String download(String urlStr){URL url = null;StringBuffer sb = new StringBuffer();String line = null;BufferedReader buffer = null;try {//创建一个URL对象url = new URL(urlStr);//创建一个Http连接HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();//使用IO流读取数据buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));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();}//返回-1下载文件失败,返回0下载成功,返回1则是文件已存在public int downFile(String urlStr,String path,String fileName){InputStream inputStream = null;FileUtils fileUtils = new FileUtils();if(fileUtils.isFileExist(fileName)){return 1;}else{try {inputStream = getInputSteamFromUrl(urlStr);} catch (IOException e) {e.printStackTrace();return -1;}File resultFile = fileUtils.write2SDFromInput(path, fileName, inputStream);if(resultFile == null){return -1;}}try {inputStream.close();} catch (IOException e) {e.printStackTrace();}return 0;}private InputStream getInputSteamFromUrl(String urlStr) throws MalformedURLException, IOException {URL url = null;url = new URL(urlStr);HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();InputStream inputStream = urlConn.getInputStream();return inputStream;}}
/Download/src/cn/android/sword/utils/FileUtils.java
package cn.android.sword.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;public class FileUtils {private String SDPATH;public String getSDPATH(){return SDPATH;}public FileUtils(){//得到当前外部存储设备的目录// /SDCARDSDPATH = Environment.getExternalStorageDirectory()+"/";}/* * 在SD卡上创建文件 */public File createSDFile(String fileName) throws IOException{File file = new File(SDPATH+fileName);file.createNewFile();return file;}/* * 在SD卡上创建目录 */public File createSDDir(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 {//创建目录createSDDir(path);//创建文件file = createSDFile(path+fileName);//创建输出流output = new FileOutputStream(file);//创建缓冲区byte buffer[] = new byte[4*1024];//写入数据while((input.read(buffer))!=-1){output.write(buffer);}//清空缓存output.flush();} catch (IOException e) {e.printStackTrace();}finally{try {//关闭输出流output.close();} catch (IOException e) {e.printStackTrace();}}return file;}}在Activity中:
/Download/src/cn/android/sword/download/DownloadActivity.java
package cn.android.sword.download;import cn.android.sword.utils.HttpDownloader;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;/* 文件下载的步骤:1:创建一个Ht't'p'URLConnection对象:HttpURLConnection urlConn = (HttpURLConnection)url.o'penConnection;2:获得一个InputStream对象:urlConn.getInputStream();3:设置网络访问权限:android.permissior.INTERNET;访问SD卡步骤:得到当前设备SD卡的目录;Environment.getExternalStorageDirectory();访问SD卡的权限:android:permission.WRITE_EXTERNAL_STORAGE */public class DownloadActivity extends Activity implements OnClickListener{private final static String SWORD="SWORD"; //声明两个按钮控件Button downloadText; Button downloadMp3; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); findViews(); } //根据Id得到控件private void findViews() {downloadText = (Button) this.findViewById(R.id.downloadText);downloadMp3 = (Button) this.findViewById(R.id.downloadMp3);//添加监听事件downloadText.setOnClickListener(this);downloadMp3.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch(v.getId()){case R.id.downloadText:HttpDownloader httpDownloader = new HttpDownloader();//所要下载文件的url路径String lrc = httpDownloader.download("http://192.168.1.101:8080/20111021/a.lrc");//日志打印输出Log.i(SWORD,""+lrc);break;case R.id.downloadMp3:HttpDownloader httpDownloader1 = new HttpDownloader();int result = httpDownloader1.downFile("http://192.168.1.101:8080/20111021/m.mp3","dir/","new.mp3");Log.i(SWORD,""+result);break;default:Log.i(SWORD,"ERROR");break;}}}
本例子所下载的歌词文件和MP3文件均为我的pc上的tomcat中项目下的文件,所以需要启动我的tomcat service服务,在虚拟机上运行:
点击downloadText,查看控制台日志输出:
可以看到乱码的文件内容,然后点击downloadMp3,在SD卡的dir目录下我们能看到一个new.mp3的文件,这说明我们的文件下载成功了。
- android 之文件下载
- Android之文件下载
- Android之文件下载
- Android之文件下载
- Android之文件下载
- android 之文件下载
- Android之文件下载
- android之文件下载
- Android之文件下载
- Android开发之文件下载
- android 开发之文件下载
- Android文件下载之断点续传
- Android之网络文件下载
- Android开发之文件下载
- [转]android 之文件下载
- android示例之文件下载
- android 开发之文件下载
- Android开发之文件下载
- 高并发高流量网站架构
- 通过hibernate去调用存储过程
- 了解RO、RW、ZI和.text .bss .data
- cisco交换机配置
- 编程珠玑第四章-编写正确的程序
- Android之文件下载
- 技术爱好者Jeffrey Richter的一段话
- 做好职业规划
- iis5.1 6.0区别
- 学习HTML 5的10个顶级资源
- 伟大公司为什么需要技术型领导?
- 从程序员到技术总监,分享10年开发经验
- 算法导论中英文版下载
- 程序员眼中的2007:寻找软件开发利器