实例
public static String getFilePath(Context context, String dir) {
String directoryPath = "";
//判断外部存储是否可用
if (MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
directoryPath = context.getExternalFilesDir(dir).getAbsolutePath();
} else {//没外部存储就使用内部存储
directoryPath = context.getFilesDir() + File.separator + dir;
}
File file = new File(directoryPath);
if (!file.exists()) {//判断文件目录是否存在
file.mkdirs();
}
return directoryPath;
}
File cacheDir = context.getCacheDir();
特点
需要注意的是,这个文件的目录和应用的存储位置有关, 当应用被移动到外部存储设备的时候,文件的绝对路径也是变化的,所以建议当数据存储到这个目录的时候,用相对路径。
这个目录和getFilesDir()
目录最大的不同在于:当安卓设备的存储空间少,或者不够用的时候,系统会自动删除这个目录下的文件。
官方建议是,超过1MB的文件,建议存储到
getExternalCacheDir()
目录下
File externalCacheDir = context.getExternalCacheDir();
特点
READ_EXTERNAL_STORAGE
, WRITE_EXTERNAL_STORAGE
)getExternalStorageState(File)
)当应用被卸载的时候,目录下的文件会被删除,但是这里和getCacheDir()
还有不同之处:
只有手机系统使用的是虚拟外部存储(虚拟SD卡)的时候,才可以在卸载应用的同时,自动删除该目录下的文件 如果是之前的物理存储(物理SD卡)则不会自动删除该目录,及目录下的文件
File filesDir = context.getFilesDir();
特点
当应用被移动到外部存储设备的时候,文件的绝对路径也是变化的,所以建议当数据存储到这个目录的时候,用相对路径 系统提供的访问此路径文件的方法是:
context.openFileOutput(String,int);
context.openFileInput(String name);
File externalFilesDir = context.getExternalFilesDir(null);
特点
READ_EXTERNAL_STORAGE
, WRITE_EXTERNAL_STORAGE
)getExternalStorageState(File)
)当应用被卸载的时候,目录下的文件会被删除,但是这里和getFilesDir()
还有不同之处:
只有手机系统使用的是虚拟外部存储(虚拟SD卡)的时候,才可以在卸载应用的同时,自动删除该目录下的文件,如果是之前的物理存储(物理SD卡)则不会自动删除该目录,及目录下的文件
File externalStorageDirectory = Environment.getExternalStorageDirectory();
特点
READ_EXTERNAL_STORAGE
, WRITE_EXTERNAL_STORAGE
)getExternalStorageState(File)
)注:在该目录下读写文件,需要获取读写权限
该目录下的文件,这个目录是用户进行操作的一个根目录,进入二级目录可以通过
getExternalFilesDirs(String)
, getExternalCacheDirs()
, and getExternalMediaDirs()
这些方法
官方建议:
不要直接使用该目录,为了避免污染用户的根命名空间 应用私有的数据,应该放在
context.getExternalFilesDir
目录下 其他的可以被分享的文件,可以放在Environment.getExternalStoragePublicDirectory(String)
目录下
File externalStoragePublicDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
特点
READ_EXTERNAL_STORAGE
, WRITE_EXTERNAL_STORAGE
)getExternalStorageState(File)
)这个目录是用来存放各种类型的文件的目录,在这里用户可以分类管理不同类型的文件(例如音乐、图片、电影等) 类型如下: