- 获取手机上SD卡信息都是通过 Environment 类实现,如下:
TextView tv_file_basic = findViewById(R.id.tv_file_basic);
String desc = "系统环境(含SD卡)的信息如下:";
desc = String.format("%s\n 根目录路径:%s", desc, Environment.getRootDirectory().getAbsolutePath());
desc = String.format("%s\n 数据目录路径:%s", desc, Environment.getDataDirectory().getAbsolutePath());
desc = String.format("%s\n 下载缓存目录路径:%s", desc, Environment.getDownloadCacheDirectory().getAbsolutePath());
desc = String.format("%s\n 外部存储(即SD卡)目录路径:%s", desc, Environment.getExternalStorageDirectory().getAbsolutePath());
desc = String.format("%s\n 外部存储(即SD卡)状态:%s", desc, Environment.getExternalStorageState());
desc = String.format("%s\n SD卡的相机目录路径:%s", desc, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM));
desc = String.format("%s\n SD卡的文档目录路径:%s", desc, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS));
desc = String.format("%s\n SD卡的下载目录路径:%s", desc, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS));
desc = String.format("%s\n SD卡的图片目录路径:%s", desc, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES));
desc = String.format("%s\n SD卡的视频目录路径:%s", desc, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES));
desc = String.format("%s\n SD卡的音乐目录路径:%s", desc, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC));
tv_file_basic.setText(desc);
-
Android将外部存储分成了2块区域,一块是所有应用均可访问的公共空间,另一块是只有应用自己才可访问的专享空间
- 内部存储保存着每个应用的安装目录
- 安装目录的空间很紧张,故,Android在SD卡的“Android/data”目录下给每个应用又单独创建了一个文件目录,用于给应用保存自己需要处理的临时文件
- 这个给每个应用单独建立的文件目录,只有当前应用才能够读写文件,算是外部存储上的私有空间
- 这个私有空间本身做了访问权限控制,因此它不受系统禁止访问的影响,应用可操作自己的文件目录
- 因为私有的文件目录只有属主应用才能访问,一旦属主应用被用户卸载,其对应的文件目录也会一起被清理掉
-
SD卡文件操作 - 公有存储空间和私有存储空间
// 获取系统的公共存储路径
String publicPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();
// 获取当前App的私有存储路径
String privatePath = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString();
TextView textView = findViewById(R.id.tv_file_path);
String desc = String.format("系统的公共存储路径位于%s", publicPath +
"\n\n当前App的私有存储路径位于" + privatePath +
"\n\nAndroid 7.0 之后默认禁止访问公共存储目录");
textView.setText(desc);
- 上面2处的代码运行效果如下:
![]()
