以下是个人初步学习安卓的一些关于文件存储的一些知识和小总结
文件存储
文件存储是android中最基本的一种数据存储方式,通过I/O流的形式把数据直接存储到文档中,与java的文件存储类似。可以存储大数据,如文本,图像,音频等。android的文件存储分为内部存储和外部存储。
内部存储
顾名思义,内部存储就是把应用程序的数据以文件方式存储到设备的内部(data/data/<packagename>file/目录下)。
内部存储使用的是Conetxt提供的openFileOutput()方法和openFileInput()方法
FileOutStream fos=openFileOutout(String name,int mode);//name:文件名,mode:文件的操作模式
FileInputStream fis=openFileInput(String name);
mode一般用来设置文件的访问权限 ,有MODE_PRIVATE, MODE_APPEND, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE。
使用FIleOutputStream对象将数据存储到文件上
String fileName="bruceluo.txt";//文件名称
String content="bruceluo";
FileOutputStream f;
try{
f=openFileOutput(fileName,MODE_PRIVATE);//MODE_PRIVATE表示该文件只能被当前文件读写
f.write(context.getBytes());//将数据写入文件bruceluo中
f.cloase();
}catch (Exeception e){
e.printStackTrace();
}
取出数据,使用FileInputStream对象读取数据
String content="";
FileInputStream fis;
try{
fis-openFileInput("bruceluo.txt");
byte[] buffer=new byte[fis,available()];//创建缓冲区,获取文件长度
fis.read(buffer);//将内容读取到缓冲区buffer
content =new String(buffer);//转换成字符串
fis.close();
}catch (Exception e){
e.printStackTrace();
}
外部存储
外部存储是将文件存储到一些外部设备中,如sd卡等,一般文件位于mnt/sdcard目录中。因为外部存储设备有可能会移除,损坏或其他状态,所以我们要在外部设备使用之前用Environment.getExternalStorageState()方法来确认外部设备是否可用。具体的了解请查看这个转发,我这里把他当作一切正常。
另外为了保证程序的安全性,我们要在清单文件的<manifest>节点上添加sd卡的读写权限
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
向sd卡中存储数据
String state=Environment.getExternalStorageState();
if(state.equals(Environment.MEDIA_MOUNTED)){ //判断外部设备是否可用
File SDPath=Environment.getExternalStorageDirectory();//获取sd卡目录,这方法可避免把路径写死找不到sd卡
File file=new File(SDPath,"bruceluo.txt");
String data="bruceluo";
FileOutputStream fos;
try{
fos =new FileOutputStream(file);
fos.write(data.getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
从sd卡中读取数据
String state=Environment.getExternalStorageState();
if(state.equals(Environment.MEDIA_MOUNTED)){ //判断外部设备是否可用
File SDPath=Environment.getExternalStorageDirectory();//获取sd卡目录,这方法可避免把路径写死找不到sd卡
File file=new File(SDPath,"bruceluo.txt");
FileInputStream fis;
try{
fis=new FileInputStream(file);
BufferedReader br=new BufferedReader(new InputStreamReader(fis));//字节流转换为字符流
String data=br.readLine();
}catch (Exception e){
e.printStackTrace();
}
}