本地数据存储----文件操作

SCID: L0030

1. 保存数据成私有文件:

String FILE_NAME = "hello_file";
String string = "hello world!";

FileOutputStream fos = this.openFileOutput(FILE_NAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();

(1) openFileOutput打开一个文件输出流, this是跟该应用程序相关的Context对象,第一个参数FILE_NAME指定文件名称,第二个参数说明打开方式,Context.MODE_PRIVATE指明该文件打开只对应用程序可见,其他应用程序将无法对该文件操作. 第二个参数的可选类型如下:
MODE_APPEND: 如果该文件已经存在,然后将数据写入,而不是抹掉它现有文件的末尾。
MODE_PRIVATE: 默认模式,创建的文件只能由应用程序调用,即为私有的,其他程序将无法查看该和更改配置内容
MODE_WORLD_READABLE: 允许所有其他应用程序有读取和创建文件的权限。
MODE_WORLD_WRITEABLE: 允许所有其他应用程序具有写入、访问和创建的文件权限。


openFileOutput语句等同与下边语句
File file = new File(FILE_PATH, FILE_NAME);
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);

这里FILE_PATH是文件全路径名,比如/data/data/com.L0030/
(2) 调用write()操作将数据写入文件。
(3) 记得写完数据后关闭文件流!


2. 读取私有文件数据:

String FILE_NAME = "hello_file";

FileInputStream fis = this.openFileInput(FILE_NAME);
byte[] buffer = new byte[1024];
int len = 0;
ByteArrayOutputStream fos = new ByteArrayOutputStream();
while( (len = fis.read(buffer)) != -1){
	fos.write(buffer, 0, len);
}
byte[] data = fos.toByteArray(); //得到文件的二进制数据
fis.close();
fos.close();

(1) openFileInput() 打开一个输入流,this是跟该应用程序相关的Context对象.

openFileInput语句等同与下边语句:
File file = new File(FILE_PATH, FILE_NAME);
in = new FileInputStream(file);

这里FILE_PATH是文件全路径名,比如/data/data/com.L0030/

(2) 循环读取数据,一次最大读取1024个字节,将读取的数据放入一个字节输出流中。
(3) 调用toByteArray()函数获得整个文件输出的数据。
(4) 不要忘记关闭输入流和输出流!


3. 读取静态文件操作:

InputStream ins = getResources().openRawResource(R.raw.my_file_name);
...

(1) 将需要操作的文件保存到项目中的res/raw/目录下,可以通过openRawResource()API打开文件,其他操作和读入私有文件数据流一样。


4. 扩展存储文件操作:

Android设备支持共享扩展存储器,程序可以将数据保存在这些设备上,一般这些设备是SD卡!

boolean externalStorageAvailable = false;
boolean externalStorageWriteable = false;

String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state)) {
	// We can read and write the media
	externalStorageAvailable = mExternalStorageWriteable = true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
	// We can only read the media
	externalStorageAvailable = true;
	externalStorageWriteable = 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
	externalStorageAvailable = externalStorageWriteable = false;
}

if (externalStorageAvailable && externalStorageWriteable) {
	File file = new File(Environment.getExternalStorageDirectory(), filename);
	FileOutputStream outStream = new FileOutputStream(file);
	outStream.write(content.getBytes());
	outStream.close();
}
(1) Environment.getExternalStorageState()获得当前扩展存储器的状态,在文件操作之前,必须要检测设备是否存在,能够正常操作!
(2) Environment.getExternalStorageDirectory()获得存储器文件根目录,由目录和文件名创建一个File对象。如果是API L8或者以上的Android系统可以使用getExternalFilesDir()直接获得公共目录,这些公共目录是可以被一般终端使用者所见的!当然用getExternalStorageDirectory()可以可以实现这样的效果!
(3) 建立跟File关联的FileOutputStream对象,将content数据二进制方式写入文件名为filename的文件中。

(4) 关闭输出流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值