Android 下载文件及写入SD卡,实例代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <Button
  8. android:id="@+id/downloadTxt"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:text="下载文本文件"
  12. />
  13. <Button
  14. android:id="@+id/downloadMp3"
  15. android:layout_width="fill_parent"
  16. android:layout_height="wrap_content"
  17. android:text="下载MP3文件"
  18. />
  19. </LinearLayout>
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.learning.example"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <application android:icon="@drawable/icon" android:label="@string/app_name">
  7. <activity android:name=".Download"
  8. android:label="@string/app_name">
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN" />
  11. <category android:name="android.intent.category.LAUNCHER" />
  12. </intent-filter>
  13. </activity>
  14. </application>
  15. <uses-sdk android:minSdkVersion="8" />
  16. <!-- 访问网络和操作SD卡 加入的两个权限配置-->
  17. <uses-permission android:name="android.permission.INTERNET"/>
  18. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  19. </manifest>
  1. package com.learning.example.util;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.InputStreamReader;
  7. import java.net.HttpURLConnection;
  8. import java.net.MalformedURLException;
  9. import java.net.URL;
  10. public class HttpDownloader {
  11. private URL url = null;
  12. /**
  13. * 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文本当中的内容
  14. * 1.创建一个URL对象
  15. * 2.通过URL对象,创建一个HttpURLConnection对象
  16. * 3.得到InputStream
  17. * 4.从InputStream当中读取数据
  18. * @param urlStr
  19. * @return
  20. */
  21. public String download(String urlStr){
  22. StringBuffer sb = new StringBuffer();
  23. String line = null;
  24. BufferedReader buffer = null;
  25. try {
  26. url = new URL(urlStr);
  27. HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
  28. buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
  29. while( (line = buffer.readLine()) != null){
  30. sb.append(line);
  31. }
  32. }
  33. catch (Exception e) {
  34. e.printStackTrace();
  35. }
  36. finally{
  37. try {
  38. buffer.close();
  39. } catch (IOException e) {
  40. e.printStackTrace();
  41. }
  42. }
  43. return sb.toString();
  44. }
  45. /**
  46. *
  47. * @param urlStr
  48. * @param path
  49. * @param fileName
  50. * @return
  51. *      -1:文件下载出错
  52. *       0:文件下载成功
  53. *       1:文件已经存在
  54. */
  55. public int downFile(String urlStr, String path, String fileName){
  56. InputStream inputStream = null;
  57. try {
  58. FileUtils fileUtils = new FileUtils();
  59. if(fileUtils.isFileExist(path + fileName)){
  60. return 1;
  61. } else {
  62. inputStream = getInputStreamFromURL(urlStr);
  63. File resultFile = fileUtils.write2SDFromInput(path, fileName, inputStream);
  64. if(resultFile == null){
  65. return -1;
  66. }
  67. }
  68. }
  69. catch (Exception e) {
  70. e.printStackTrace();
  71. return -1;
  72. }
  73. finally{
  74. try {
  75. inputStream.close();
  76. } catch (IOException e) {
  77. e.printStackTrace();
  78. }
  79. }
  80. return 0;
  81. }
  82. /**
  83. * 根据URL得到输入流
  84. * @param urlStr
  85. * @return
  86. */
  87. public InputStream getInputStreamFromURL(String urlStr) {
  88. HttpURLConnection urlConn = null;
  89. InputStream inputStream = null;
  90. try {
  91. url = new URL(urlStr);
  92. urlConn = (HttpURLConnection)url.openConnection();
  93. inputStream = urlConn.getInputStream();
  94. } catch (MalformedURLException e) {
  95. e.printStackTrace();
  96. } catch (IOException e) {
  97. e.printStackTrace();
  98. }
  99. return inputStream;
  100. }
  101. }
  1. package com.learning.example.util;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.OutputStream;
  7. import android.os.Environment;
  8. public class FileUtils {
  9. private String SDPATH;
  10. private int FILESIZE = 4 * 1024;
  11. public String getSDPATH(){
  12. return SDPATH;
  13. }
  14. public FileUtils(){
  15. //得到当前外部存储设备的目录( /SDCARD )
  16. SDPATH = Environment.getExternalStorageDirectory() + "/";
  17. }
  18. /**
  19. * 在SD卡上创建文件
  20. * @param fileName
  21. * @return
  22. * @throws IOException
  23. */
  24. public File createSDFile(String fileName) throws IOException{
  25. File file = new File(SDPATH + fileName);
  26. file.createNewFile();
  27. return file;
  28. }
  29. /**
  30. * 在SD卡上创建目录
  31. * @param dirName
  32. * @return
  33. */
  34. public File createSDDir(String dirName){
  35. File dir = new File(SDPATH + dirName);
  36. dir.mkdir();
  37. return dir;
  38. }
  39. /**
  40. * 判断SD卡上的文件夹是否存在
  41. * @param fileName
  42. * @return
  43. */
  44. public boolean isFileExist(String fileName){
  45. File file = new File(SDPATH + fileName);
  46. return file.exists();
  47. }
  48. /**
  49. * 将一个InputStream里面的数据写入到SD卡中
  50. * @param path
  51. * @param fileName
  52. * @param input
  53. * @return
  54. */
  55. public File write2SDFromInput(String path,String fileName,InputStream input){
  56. File file = null;
  57. OutputStream output = null;
  58. try {
  59. createSDDir(path);
  60. file = createSDFile(path + fileName);
  61. output = new FileOutputStream(file);
  62. byte[] buffer = new byte[FILESIZE];
  63. /*真机测试,这段可能有问题,请采用下面网友提供的
  64. while((input.read(buffer)) != -1){
  65. output.write(buffer);
  66. }
  67. */
  68. /* 网友提供 begin */
  69. int length;
  70. while((length=(input.read(buffer))) >0){
  71. output.write(buffer,0,length);
  72. }
  73. /* 网友提供 end */
  74. output.flush();
  75. }
  76. catch (Exception e) {
  77. e.printStackTrace();
  78. }
  79. finally{
  80. try {
  81. output.close();
  82. } catch (IOException e) {
  83. e.printStackTrace();
  84. }
  85. }
  86. return file;
  87. }
  88. }
  1. package com.learning.example;
  2. import com.learning.example.util.HttpDownloader;
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.Button;
  8. public class Download extends Activity {
  9. private Button downlaodTxtButton ;
  10. private Button downlaodMP3Button ;
  11. @Override
  12. public void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.main);
  15. downlaodTxtButton = (Button)findViewById(R.id.downloadTxt);
  16. downlaodTxtButton.setOnClickListener(new DownloadTxtListener());
  17. downlaodMP3Button = (Button)findViewById(R.id.downloadMp3);
  18. downlaodMP3Button.setOnClickListener(new DownloadMP3Listener());
  19. }
  20. class DownloadTxtListener implements OnClickListener{
  21. @Override
  22. public void onClick(View v) {
  23. HttpDownloader downloader = new HttpDownloader();
  24. String lrc = downloader.download("http://172.16.11.9:8080/test/1.lrc");
  25. System.out.println(lrc);
  26. }
  27. }
  28. class DownloadMP3Listener implements OnClickListener{
  29. @Override
  30. public void onClick(View v) {
  31. HttpDownloader downloader = new HttpDownloader();
  32. int result = downloader.downFile("http://172.16.11.9:8080/test/1.mp3", "voa/", "1.map3");
  33. System.out.println(result);
  34. }
  35. }
  36. }

Notice:访问网络和操作SD卡 记得加入的两个权限配置

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

Android 下载文件及写入SD卡的更多相关文章

  1. Android从网络某个地址下载文件、写入SD卡

    首先创建一个HttpDownloader类,获取下载文件的网络地址,将文件下载下来以String流的方式返回: public String download(String urlStr){ //url ...

  2. Android 将文件保存到SD卡中

    ①写文件到sd卡中需要获得权限,在AndroidManifest.xml中添加如下权限: <uses-permission android:name="android.permissi ...

  3. Android 将文件保存到SD卡,从卡中取文件,及删除文件

    //保存到SD卡 private static String sdState = Environment.getExternalStorageState();     private static S ...

  4. Android根据URL下载文件保存到SD卡

    //下载具体操作 private void download() { try { URL url = new URL(downloadUrl); //打开连接 URLConnection conn = ...

  5. 转 Android:文件下载和写入SD卡学习小结

    转自 http://blog.csdn.net/zzp_403184692/article/details/8160739  一.文件下载  Android开发中,有时需要从网上下载一些资源以供用户使 ...

  6. [置顶] Android学习系列-把文件保存到SD卡上面(6)

    Android学习系列-把文件保存到SD卡上面(5) 一般多媒体文件,大文件需要保存到SD卡中.关键点如下: 1,SD卡保存目录:mnt/sdcard,一般采用Environment.getExter ...

  7. android学习笔记47——读写SD卡上的文件

    读写SD卡上的文件 通过Context的openFileInput.openFileOutput来打开文件输入流.输出流时,程序打开的都是应用程序的数据文件夹里的文件,其存储的文件大小可能都比较有限- ...

  8. assets下的文件复制到SD卡

    由于assets和res下的文件都只可以读不可以写,那么在程序初始化后,将后期需要使用并且需要修改的文件复制到SD卡.下面代码提供一个工具类,将assets下的任意资源复制到SD卡下. assets下 ...

  9. asserts文件存到外部SD卡里

    package com.example.wang.testapp3; import android.content.res.AssetManager; import android.graphics. ...

随机推荐

  1. AngularJs-指令1

    前言: 前面写的有些乱,并且有些罗嗦,以后会注意的.希望我写的文章能帮助大家. 1,什么是指令 简单的说,指令是angularjs在html页面中建立一套自己能识别的标签元素.属性.类和注释,用来达到 ...

  2. 每天一个linux命令(52):scp命令

    scp 是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且 scp传输是加密的.可能会稍微影响一下速度.当你服 ...

  3. Codeforces Round #379 (Div. 2) D. Anton and Chess 模拟

    题目链接: http://codeforces.com/contest/734/problem/D D. Anton and Chess time limit per test4 secondsmem ...

  4. chrom_input_click

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  5. CSS设置技巧

    一.单位和值 1.1 颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令 ...

  6. RedGate .NET Reflector注册问题(反注册)

    Reflector分为桌面版和VS集成版本,当我们使用注册机注册的时候如果注册了Standvard版本,那么我们的VS就不能集成查看,也不能Debug,那么这 显然不是我们想要的,我们会选择重新注册, ...

  7. Bzoj 1336&1337 Alien最小圆覆盖

    1336: [Balkan2002]Alien最小圆覆盖 Time Limit: 1 Sec  Memory Limit: 162 MBSec  Special Judge Submit: 1473  ...

  8. PHP局部变量与全局变量

    一.局部变量定义:在函数内部声明,且只能在函数内部调用的变量. 注意:参数也是局部变量的一种. demo1:1 function demo1(){2     $age = 10;3 }4 5 echo ...

  9. IOS基础之 (七) 分类Category

    一 Category 分类:Category(类目,类别) (OC有) 命名:原来的类+类别名(原来的类名自动生成,只要写后面的类别名,一般以模块名为名.比如原来类 Person,新建分类 Ct,新建 ...

  10. 解决IE apk变成zip:Android 手机应用程序文件下载服务器Nginx+Tomcat配置解决方法

    APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ...