android提供对可移除的外部存储进行文件存储。在对外部sdcard进行调用的时候首先要调用Environment.getExternalStorageState()检查sdcard的可用状态。通过Environment.getExternalStorageDirectory()得到Sdcard的路径。文件写入外部存储需要添加对sdcard的授权

  <!-- 写sdcard需要添加写sdcard的授权 -->
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

  boolean mExternalStorageAvailable = false;
  boolean mExternalStorageWriteable = false;
  String state = Environment.getExternalStorageState();

  if (Environment.MEDIA_MOUNTED.equals(state)) {
   // We can read and write the media
   mExternalStorageAvailable = mExternalStorageWriteable = true;
  } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
   // We can only read the media
   mExternalStorageAvailable = true;
   mExternalStorageWriteable = false;
  } else {
   // Something else is wrong. It may be one of many other states, but all we need
   // to know is we can neither read nor write
   mExternalStorageAvailable = mExternalStorageWriteable = false;
  }
android学习过程中的示例如下:
  文件读写工具类:
  
 1 package com.example.android_data_storage_sdcard.file; 2  3 import java.io.ByteArrayOutputStream; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.FileNotFoundException; 7 import java.io.FileOutputStream; 8 import java.io.IOException; 9 10 import android.os.Environment;11 import android.util.Log;12 /**13  * @author xiaowu14  * @note  文件存储之外部存储(sdcard存储)。15  *         外部存储不需要context        16  */17 public class FileUitls {18     private final String TAG = "FileUtil";19 20     /**21      * 保存文件至外部存储的SD卡22      * @param fileName23      * @param mode24      * @param data25      * @return 是否存储内容到sdcard成功26      */27     public boolean saveFileToSdcard(String fileName,  byte[] data) {28         boolean flag = false;29         // 判断sdcard的状态30         String state = Environment.getExternalStorageState();31         // 获取sdcard的根目录 /mnt/sdcard/...32         File root = Environment.getExternalStorageDirectory();33         FileOutputStream outputStream = null;34         // Environment.MEDIA_MOUNTED表示SD卡挂载在手机上并可以读写35         if (Environment.MEDIA_MOUNTED.equals(state)) {36             // 在sdcard的根目录下创建文件37             File file = new File(root, fileName);38             try {39                 outputStream = new FileOutputStream(file);40                 outputStream.write(data, 0, data.length);41                 flag = true ;42             } catch (FileNotFoundException e) {43                 Log.i(TAG, "文件未找到异常!");44             } catch (Exception e) {45                 Log.i(TAG, "写文件发生异常");46             } finally {47                 if (outputStream != null) {48                     try {49                         outputStream.close();50                     } catch (IOException e) {51                         Log.i(TAG, "关闭IO流发生异常!");52                     }53                 }54             }55         }56         return flag;57     }58     /**59      * 从sdcard中读文件60      * @param fileName61      * @return 文件内容62      */63     public String  readFromSdcard(String fileName){64         String  str = "" ;65         FileInputStream inputStream = null;66         String state = Environment.getExternalStorageState();67         ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();68         try {69             if (Environment.MEDIA_MOUNTED.equals(state)) {70                 //获取Sdcard路径71                 File root = Environment.getExternalStorageDirectory();72                 File file = new File(root.getAbsolutePath(),fileName);73                 if(file.exists()){74                     inputStream = new FileInputStream(file);75                     int len = 0 ;76                     byte[] data = new byte[1024];77                     while ((len = inputStream.read(data)) != -1) {78                         byteArrayOutputStream.write(data, 0, len);79                     }80                     return new String(byteArrayOutputStream.toByteArray());81                 }82             }83         } catch (Exception e) {84             Log.i(TAG, "文件读取异常!");85         }finally{86             if(inputStream != null){87                 try {88                     inputStream.close();89                 } catch (IOException e) {90                     Log.i(TAG, "关闭流异常!");91                 }92             }93         }94         return str ;95     }96 }

  Junit单元测试类:

  单元测试类必须继承自AndroidTestCase,并在资源清单文件中添加单元测试包 <uses-library android:name="android.test.runner"/>,并添加单元测试目标包

  <!-- 引入单元测试目标包 -->
  <instrumentation
    android:name="android.test.InstrumentationTestRunner"
    android:targetPackage="com.example.android_data_storage_sdcard" >
  </instrumentation>

 1 package com.example.android_data_storage_sdcard; 2  3 import android.test.AndroidTestCase; 4  5 import com.example.android_data_storage_sdcard.file.FileUitls; 6  7 public class MyTest extends AndroidTestCase { 8      9     public void test() {10         FileUitls fileUitls = new FileUitls();11         fileUitls.saveFileToSdcard("keji.txt", "橘子洲头".getBytes());12     }13 }


  

更多相关文章

  1. 怎么在android的XML文件里加入凝视
  2. android下大文件分割上传
  3. Android之adt 23找不到NDK路径设置解决方案
  4. android 打开预览不同类型文件
  5. Android中使用PULL方式解析XML文件深入介绍
  6. Android使用文件管理器打开指定文件夹,浏览里面的内容
  7. android 向serverGet和Post请求的两种方式,android向server发送
  8. android使用webview加载flash文件

随机推荐

  1. Android环境搭建2 ndk环境搭建
  2. 联想A798T刷机实战
  3. Android小游戏-数独(附源码)
  4. android 获取经纬度
  5. (1) Android-5.0源码分析计划
  6. Android中得Static关键字
  7. 【整理】Android中使用XML自定义组件各种
  8. Android(安卓)Native 程序逆向入门(一)——
  9. 未来谁能引领Android大势
  10. php学习小结(php程序的运行原理、短标签的