android 开发-文件存储之读写sdcard
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的更多相关文章
- android 开发-数据存储之文件存储
android的文件存储是通过android的文件系统对数据进行临时的保存操作,并不是持久化数据,例如网络上下载某些图片.音频.视频文件等.如缓存文件将会在清理应用缓存的时候被清除,或者是应用卸载的时 ...
- 关于Android开发数据存储的方式(一)
关于Android开发数据存储方式(一) 在厦门做Android开发也有两个月了,快情人节了.我还在弄代码. 在微信平台上开发自己的APP,用到了数据存储的知识,如今总结一下: 整体的来讲.数据存储方 ...
- Android开发--数据存储之File文件存储
转载来自:http://blog.csdn.net/ahuier/article/details/10364757,并进行扩充 引言:Android开发中的数据存储方式 Android提供了5种方式存 ...
- Android开发进阶:如何读写Android文件
Android主要有四大主要组件组成:Activity.ContentProvider.Service.Intent组成.Android文件的运行主要需要读写四大组件的文件.本文将介绍如何读写Andr ...
- Android学习——文件存储
在Andriod开发中,文件存储和Java的文件存储类似.但需要注意的是,为了防止产生碎片垃圾,在创建文件时,要尽量使用系统给出的函数进行创建,这样当APP被卸载后,系统可以将这些文件统一删除掉.获取 ...
- 19.Android之文件存储方法学习
Android开发中会用到文件存储,今天来学习下. 先改下布局界面: <?xml version="1.0" encoding="utf-8"?> ...
- Android使用文件存储数据
Android上最基本的存储数据的方式即为使用文件存储数据,使用基本的Java的FileOutStream,BufferedWriter,FileInputStream和BufferedReader即 ...
- Android File文件存储功能
1.介绍 2.使用方法 3.文件存储位置 4.java后台代码 package com.lucky.test47file; import android.support.v7.app.AppCompa ...
- Android开发 文件读写openFileOutput与openFileInput
package com.example.androidtest; import java.io.ByteArrayOutputStream; import java.io.FileInputStrea ...
随机推荐
- word2010以上版本中快捷录入数学公式的方法(二)
以前推荐的方法,随着方正飞翔网站上关闭了数学公式输入法的支持也不能不用了,现在再推荐一个可以在word2010以上版中快捷输入数学公式的方法,安装AxMath,一切问题都OK!我是直接购买的正版,25 ...
- python的WeakKeyDictionary类和weakref模块的其他函数
python的WeakKeyDictionary类和weakref模块的其他函数 # -*- coding: utf-8 -*- # @Author : ydf # @Time : 2019/6/13 ...
- Debain install Jupyter
1. install Anaconda https://www.anaconda.com/download/#linux 2. config jupyter $ ipython from notebo ...
- JavaScript设计模式--桥梁模式--引入
1.使用情况 (1)事件的监控 #1,利用页面的button来选择宠物的例子(思路) button.addEvent(element,"click",getPetByBame); ...
- 【java并发编程艺术学习】(五)第二章 java并发机制的底层实现原理 学习记录(三) 原子操作的实现原理学习
章节介绍 主要包括 术语定义.处理器如何实现原子操作.Java如何实现原子操作: 原子(atomic)本意是 不能再进一步分割的最小粒子,“原子操作” 意为 不可被中断的一个或一系列操作. 术语定义 ...
- linux命令-vim命令模式
编辑模式下 按 “esc” 进去命令模式 :wq 保存并退出 :w 保存 已写入 :q!不保存强制退出 :wq! 强制保存退出 :set nu 显示行号 :set nonu 去掉行号 :nohl 取 ...
- 菜鸟攻城狮3(Holle World)
1.创建一个HolleWorld.java文本文件 2.代码:public class HolleWorld { public static void main(String[] args) { Sy ...
- Unity堆内存优化
unity中减少堆内存分配以减少垃圾回收处理:只有局部变量且为值类值的变量是从stack栈中分配内存,其它所有情况都是从heap堆中分配内在.* 缓存获取到的数据.* 频繁被调用的函数中尽量少的分配空 ...
- Visual Studio的输出窗口上输出调试信息的函数
Visual Studio的输出窗口上输出文字的函数 参考网站:http://www.voidcn.com/blog/u011808175/article/p-2083567.html 当你编写非控制 ...
- 各版本Google浏览器下载地址
各版本谷歌浏览器下载地址 https://www.chromedownloads.net/chrome64win/