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 ...
随机推荐
- 第三篇elasticsearch分布式安装
elasticSearch 分布式安装 1.在elasticSearch下的config下elasticsearch.yml文件最后一行添加注意 一定要加空格在:后面cluster.name: wal ...
- iOS开发中,修改ASIHTTPRequest源码,禁止在POST时URL编码
通过ASIHTTPRequest库进行POST时,会对POST的文本内容进行encodeURL,而且ASIHTTPRequest自身并没有配置项可以关闭这个转换. 本文提供一个方法关闭encodeUR ...
- NIO和Reactor
本文参考Doug Lea的Scalable IO in Java. 网络服务 随着网络服务的越来越多,我们对网络服务的性能有了更高的要求,提供一个高性能,稳定的web服务是一件很麻烦的事情,所以有了n ...
- 每次选中数组中的N条数据, 如果让每条数据被选中的次数做到平均??
经常有这样的需求, 有一组数据, 每次展示其中的1条或N条,希望每条数据展示量可以做到平均. 一开始想依次展示每条数据并做记录,整组数据全展示一遍之后清除记录, 然后一直循环下去. 实现的过程中又觉得 ...
- EasyUI知识点汇总
combobox联动设置 $(document).ready(function() { $('#gdfsdl1').combobox({ onSelect: function(record){ $(' ...
- LSI SAS 3008 Web配置操作
配置 LSI SAS 3008 介绍LSISAS3008的配置操作. 4.1 登录CU界面 介绍登录LSISAS3008的CU配置界面的方法. 4.2 创建RAID 介绍在LSISAS3008扣卡上创 ...
- 【mybatis-记录】
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...
- 匿名委托(方法) 以 ThreadStart 为例
Hello Tec. 匿名委托(方法) 以 ThreadStart 为例 REF:http://baike.baidu.com/view/2761370.htm?fr=aladdin 不使用匿 ...
- 谈谈asp.net中的<% %>,<%= %>,<%# %><%$ %>的使用-转
首先我们来看一下<% %>的使用 在aspx的页面中只能使用服务器控件和一般的控件,有些时候你想在该页面写入c#代码,必须使用<% %>,然后在里面写入c#的代码,下面我们来看 ...
- 业务、数据记录——ThreadPool.QueueUserWorkItem及Redis的实现
业务描述 当用户执行完业务操作,或者数据操作后,讲业务记录/数据追踪插入到Redis中.ThreadPool.QueueUserWorkItem定时检查队列并将上述数据插入到数据库中持久化. 实现流程 ...