Android中文件存储按照存放位置分为两类:保存在手机中的和保存在sd卡中的(这里说的sd卡可以是外置的,也可以是内置不可取出的)
存储在手机-->存储比较小的关键数据文件
-->存储在 /data/data/<package name>/files/ 文件夹下
-->通过两种方式进行读写
方式一
//打开在/data/data/<package name>/files/文件夹下文件的输出流和输入流
//fileName不能包含路径
FileOutputStream Context.openFileOutput(String fileName, mode)
FileInputStream Context.openFileInput(String fileName)
mode:
Context.MODE_PRIVATE 只能本应用使用,覆盖
Context.MODE_APPEND 只能本应用使用,追加
Context.MODE_WORLD_READABLE 可以被其他应用读取
Context.MODE_WORLD_WRITEABLE 可以被其他应用写出
Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE 可以被其他应用读取和写出
方式二
//得到目录绝对路径
String Context.getFilesDir() -->得到 /data/data/<package name>/files/ 目录
String Context.getCacheDir() -->得到 /data/data/<package name>/caches/ 目录
//查找、新建文件
例如:File f = new File(getFilesDir(), "filename");
存储在内存卡
-->存储比较大量的资源文件
重要方法:
String Environment.getExternalStorageState() --> 得到sdcard的状态,挂载状态为Environment.MEDIA_MOUNTED
File Environment.getExternalStorageDirectory() --> 得到sdcard根目录
File Context.getExternalFilesDir(String type) --> 得到sdcard中专属于此应用的根目录(/<sdcard>/Android/<package name>/)或者其子目录
type为null时为此根目录,type为 Environment.DIRECTORY_MUSIC, Environment.DIRECTORY_PODCASTS, Environment.DIRECTORY_RINGTONES, Environment.DIRECTORY_ALARMS, Environment.DIRECTORY_NOTIFICATIONS, Environment.DIRECTORY_PICTURES, Environment.DIRECTORY_MOVIES时分别为根目录下对应的子目录
一般流程:
//在AndroidManifest文件中引入权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
//判断是否有sdCard挂载到手机
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//取得scCard中需要新建文件的目录
File dir = Environment.getExternalStorageDirectory();
//File dir = getApplicationContext().getExternalFilesDir(null);
//File dir = getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES);
//在sdCard根目录下查找/新建文件
File file = new File(dir, "file_name");
//对文件进行操作
//...
}