文件存储是每个系统都应该具有的功能,Android系统采用Java语言开发,所以它的文件存储功能基本上和J2SE一样的。为什么会引入文件存储?因为大文件、图片等我们若只存储在手机中很有限,一般都是用一个外存储设备进行存储。好了今天我们就讲讲用编程的方式在Android系统中进行存储。
文件存储的位置
一般文件默认存储在/data/data/<包>/files/***.***(针对我们开发的APK的时候),当然我们也可以存储在存储卡上(这个时候需要在androidManifest.xml 设定文件的操作权限)。
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
openFileOutput() 写入
在Activity组件中提供了此方法用于写入文件数据,我们先看以下代码,再做解释:
public void store() {
try {
//获取文件的输出流
FileOutputStream out=this.openFileOutput("test.txt",Context.MODE_WORLD_READABLE);
//将界面上textboox1控件的值写入到输出文件流中
out.write(textboox1.getText().toString().getBytes());
//关闭文件流,数据保存成功
out.close();
} catch (FileNotFoundException e) {
return;
}
catch (IOException e){
return ;
}
}
从代码中我们可以看到openFileOutput()有两个参数,第一个是文件名,第二个则是文件的操作权限。它有以下操作权限:
Context.MODE_PRIVATE=0:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND;
Context.MODE_APPEND = 32768:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件;
Context.MODE_WORLD_READABLE = 1:表示当前文件可以被其他应用读取;
Context.MODE_WORLD_WRITEABLE= 2:表示当前文件可以被其他应用写入;
如果想需要有读写权限,需要将Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE表示。
openFileInput() 读取
Activity组件提供了读取的方法,默认的文件在/data/data/<包>/files/下,实例代码如下:
public void onload()
{
try {
//文件输入流
FileInputStream in=this.openFileInput("test.txt");
ByteArrayOutputStream stream=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int length=-1;
//读取数据并放在byte数组中
while((length=in.read(buffer))!=-1) {
//写入byte文件流
stream.write(buffer,0,length);
}
stream.close();
in.close();
textboot1.setText(stream.toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e){
return ;
}
}
SDCard 数据存储
前面已经讲到数据在存储到外部设备时候,需要设定其操作权限。以下的操作方式是我们在实际项目开发过程中常用到的。
//1.用于获取SDCard的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//2.获取SDCard目录
File sdCardDir = Environment.getExternalStorageDirectory();
//3.在外部设备上创建 获取文件
File saveFile = new File(sdCardDir, “test.txt”);
//文件存储位置在/sdcard/test.txt
//等价于 File saveFile = new File("/sdcard/a.txt");
//4.文件输出流
FileOutputStream outStream = new FileOutputStream(saveFile);
//5.写入数据
outStream.write("test".getBytes());
//6.关闭文件输出流
outStream.close();
}