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. word2010以上版本中快捷录入数学公式的方法(二)

    以前推荐的方法,随着方正飞翔网站上关闭了数学公式输入法的支持也不能不用了,现在再推荐一个可以在word2010以上版中快捷输入数学公式的方法,安装AxMath,一切问题都OK!我是直接购买的正版,25 ...

  2. python的WeakKeyDictionary类和weakref模块的其他函数

    python的WeakKeyDictionary类和weakref模块的其他函数 # -*- coding: utf-8 -*- # @Author : ydf # @Time : 2019/6/13 ...

  3. Debain install Jupyter

    1. install Anaconda https://www.anaconda.com/download/#linux 2. config jupyter $ ipython from notebo ...

  4. JavaScript设计模式--桥梁模式--引入

    1.使用情况 (1)事件的监控 #1,利用页面的button来选择宠物的例子(思路) button.addEvent(element,"click",getPetByBame); ...

  5. 【java并发编程艺术学习】(五)第二章 java并发机制的底层实现原理 学习记录(三) 原子操作的实现原理学习

    章节介绍 主要包括 术语定义.处理器如何实现原子操作.Java如何实现原子操作: 原子(atomic)本意是 不能再进一步分割的最小粒子,“原子操作” 意为 不可被中断的一个或一系列操作. 术语定义 ...

  6. linux命令-vim命令模式

    编辑模式下 按 “esc” 进去命令模式 :wq 保存并退出 :w  保存 已写入 :q!不保存强制退出 :wq! 强制保存退出 :set nu 显示行号 :set nonu 去掉行号 :nohl 取 ...

  7. 菜鸟攻城狮3(Holle World)

    1.创建一个HolleWorld.java文本文件 2.代码:public class HolleWorld { public static void main(String[] args) { Sy ...

  8. Unity堆内存优化

    unity中减少堆内存分配以减少垃圾回收处理:只有局部变量且为值类值的变量是从stack栈中分配内存,其它所有情况都是从heap堆中分配内在.* 缓存获取到的数据.* 频繁被调用的函数中尽量少的分配空 ...

  9. Visual Studio的输出窗口上输出调试信息的函数

    Visual Studio的输出窗口上输出文字的函数 参考网站:http://www.voidcn.com/blog/u011808175/article/p-2083567.html 当你编写非控制 ...

  10. 各版本Google浏览器下载地址

    各版本谷歌浏览器下载地址 https://www.chromedownloads.net/chrome64win/