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学习过程中的示例如下:
  文件读写工具类:
  
 package com.example.android_data_storage_sdcard.file;

 import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; import android.os.Environment;
import android.util.Log;
/**
* @author xiaowu
* @note 文件存储之外部存储(sdcard存储)。
* 外部存储不需要context
*/
public class FileUitls {
private final String TAG = "FileUtil"; /**
* 保存文件至外部存储的SD卡
* @param fileName
* @param mode
* @param data
* @return 是否存储内容到sdcard成功
*/
public boolean saveFileToSdcard(String fileName, byte[] data) {
boolean flag = false;
// 判断sdcard的状态
String state = Environment.getExternalStorageState();
// 获取sdcard的根目录 /mnt/sdcard/...
File root = Environment.getExternalStorageDirectory();
FileOutputStream outputStream = null;
// Environment.MEDIA_MOUNTED表示SD卡挂载在手机上并可以读写
if (Environment.MEDIA_MOUNTED.equals(state)) {
// 在sdcard的根目录下创建文件
File file = new File(root, fileName);
try {
outputStream = new FileOutputStream(file);
outputStream.write(data, 0, data.length);
flag = true ;
} catch (FileNotFoundException e) {
Log.i(TAG, "文件未找到异常!");
} catch (Exception e) {
Log.i(TAG, "写文件发生异常");
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
Log.i(TAG, "关闭IO流发生异常!");
}
}
}
}
return flag;
}
/**
* 从sdcard中读文件
* @param fileName
* @return 文件内容
*/
public String readFromSdcard(String fileName){
String str = "" ;
FileInputStream inputStream = null;
String state = Environment.getExternalStorageState();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try {
if (Environment.MEDIA_MOUNTED.equals(state)) {
//获取Sdcard路径
File root = Environment.getExternalStorageDirectory();
File file = new File(root.getAbsolutePath(),fileName);
if(file.exists()){
inputStream = new FileInputStream(file);
int len = 0 ;
byte[] data = new byte[1024];
while ((len = inputStream.read(data)) != -1) {
byteArrayOutputStream.write(data, 0, len);
}
return new String(byteArrayOutputStream.toByteArray());
}
}
} catch (Exception e) {
Log.i(TAG, "文件读取异常!");
}finally{
if(inputStream != null){
try {
inputStream.close();
} catch (IOException e) {
Log.i(TAG, "关闭流异常!");
}
}
}
return str ;
}
}

  Junit单元测试类:

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

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

 package com.example.android_data_storage_sdcard;

 import android.test.AndroidTestCase;

 import com.example.android_data_storage_sdcard.file.FileUitls;

 public class MyTest extends AndroidTestCase {

     public void test() {
FileUitls fileUitls = new FileUitls();
fileUitls.saveFileToSdcard("keji.txt", "橘子洲头".getBytes());
}
}
  

android 开发-文件存储之读写sdcard的更多相关文章

  1. android 开发-数据存储之文件存储

    android的文件存储是通过android的文件系统对数据进行临时的保存操作,并不是持久化数据,例如网络上下载某些图片.音频.视频文件等.如缓存文件将会在清理应用缓存的时候被清除,或者是应用卸载的时 ...

  2. 关于Android开发数据存储的方式(一)

    关于Android开发数据存储方式(一) 在厦门做Android开发也有两个月了,快情人节了.我还在弄代码. 在微信平台上开发自己的APP,用到了数据存储的知识,如今总结一下: 整体的来讲.数据存储方 ...

  3. Android开发--数据存储之File文件存储

    转载来自:http://blog.csdn.net/ahuier/article/details/10364757,并进行扩充 引言:Android开发中的数据存储方式 Android提供了5种方式存 ...

  4. Android开发进阶:如何读写Android文件

    Android主要有四大主要组件组成:Activity.ContentProvider.Service.Intent组成.Android文件的运行主要需要读写四大组件的文件.本文将介绍如何读写Andr ...

  5. Android学习——文件存储

    在Andriod开发中,文件存储和Java的文件存储类似.但需要注意的是,为了防止产生碎片垃圾,在创建文件时,要尽量使用系统给出的函数进行创建,这样当APP被卸载后,系统可以将这些文件统一删除掉.获取 ...

  6. 19.Android之文件存储方法学习

    Android开发中会用到文件存储,今天来学习下. 先改下布局界面: <?xml version="1.0" encoding="utf-8"?> ...

  7. Android使用文件存储数据

    Android上最基本的存储数据的方式即为使用文件存储数据,使用基本的Java的FileOutStream,BufferedWriter,FileInputStream和BufferedReader即 ...

  8. Android File文件存储功能

    1.介绍 2.使用方法 3.文件存储位置 4.java后台代码 package com.lucky.test47file; import android.support.v7.app.AppCompa ...

  9. Android开发 文件读写openFileOutput与openFileInput

    package com.example.androidtest; import java.io.ByteArrayOutputStream; import java.io.FileInputStrea ...

随机推荐

  1. eclipse如何集成tomcat插件

    刚在Eclipse官方网站下载的Eclipse,需要自己手动安装tomcat插件才能配置tomcat服务器.网上好多安装方法,这里我就不厌其烦的再写一遍,边安装边截图讲解下安装方法. 首先你要去下载E ...

  2. windows linux 使用python执行系统命令并将结果保存到变量

    最近需要用到os.system 发现不能赋值到变量 后查有更新的模块,如下: os.system os.spawn* os.popen* popen2.* commands.* 重新使用content ...

  3. [bzoj2038]莫队算法学习

    解题关键:莫队最重要的是区间之间以$O(1)$的复杂度进行转化,由于电脑原因,后续补上公式推导. #include<cstdio> #include<cstring> #inc ...

  4. assert.equal()

    assert.equal(actual, expected[, message]) 使用相等运算符(==)测试 actual 参数与 expected 参数是否相等(通俗解释equal方法接受三个参数 ...

  5. 6.6 安装IDEA

    非常感谢Kevin指导.让我简化了安装步骤.安装包可以直接到我的公司文件夹中sunny文件夹中获取. 首先准备好安装包: 然后打开终端: 解压,进入bin目录,执行idea.sh;或者,直接运行: b ...

  6. 自签名配置HTTPS

    基于AFN3.0 1.将后台提供的.cer文件文件保存至本地 2.在封装的网络请求工具类中为AFN的AFSecurityPolicy属性赋值 -(AFSecurityPolicy *)customSe ...

  7. 新安装的 ubuntu 下 make menuconfig 报错

    环境:Ubtuntu 12.04 LTS 新安装的ubuntu 出现不能使用make menuconfig. 1.sudo apt-get update 更新软件 2.安装下面的软件 sudo apt ...

  8. 利用Fitnesse测试外部jar包

    1. 下载Fitnesse官方jar http://www.fitnesse.org/FitNesseDownload 2. 下载后,创建下面目录,其中FitnesseRoot目录,不需要创建,Fit ...

  9. Java中Method.invoke方法,反射?

    正常来说,我们调用对象的方法是通过dot运算符来进行的,这里我们介绍另一种方法,有以下几个步骤:1,获取该类的Class Type:2,通过getMethod方法获取Method对象:3,通过调用in ...

  10. php解析入库跟出库

    转载:http://www.jb51.net/article/39092.htm 数据放入数据库和取出来显示在页面需要注意什么 入库时 $str=addslashes($str); $sql=\&qu ...