关于Android的一些存储
一些设备把持久的存储空间划分为"internal" 和 "external"两个部分,所以即使设备没有可移除的存储,也会存在两个存储空间。并且无论外存储是否可移除,对于API的操作时是一样的。
3.默认只有该app可以访问;
4.随app卸载而删除;
/mnt 目录,linux默认挂载外部设备都会挂到这个目录下面去,如将sd卡挂载上去后,会生成一个/mnt/sdcard 目录。
/sdcard 目录是一个软链接,指向/mnt/sdcard 目录,即这个目录的内容就是sdcard的内容。
2.判断外存储是否可以卸载Environment.isExternalStorageRemovable();
3.不一定可用(用户可能把其挂载为USB存储设备或SD卡被移除,可使用Environment.getExternalStorageState()判断当前是否处于可用状态);
4.全局可读的,存在一定的安全隐患(可能被误删);
5.只有通过Context.getExternalCacheDir()保存的文件会随着app卸载而删除;
6.使用场景:
公共文件:app被卸载之后,文件保持对其他App可用(Envoronment.getExternalStoragePublicDirectory(String type));
私有文件:App在外存储的私有文件,由于尺寸较大不适合放在内存储 (Context.getExternalCacheDir());
返回路径:/data/data/your.package.name/files
2、context.fileList();
返回/data/data/your.package.name/files目录下的所有文件名(包含文件夹)
3、context.deleteFile(String name);
删除/data/data/your.package.name/files目录下某一个文件/文件夹
4、context.openFileInput(String name) ;
返回 /data/data/your.package.name/files目录下的某一个文件(由参数name指定)的输入流(java.io.FileInputStream)
5、context.openFileOutput(String name, int mode);
返回/data/data/your.package.name/files目录下的某一个文件(由参数name指定)的输出流对象(java.io.FileOutputStream)
6、context.getCacheDir().getAbsolutePath();
返回路径:/data/data/your.package.name/cache
7、context.getDir("abc", Context.MODE_PRIVATE).getAbsolutePath();
返回路径:/data/data/your.package.name/app_abc
若没有该文件夹,自会自动创建(创建时会自动在abc前加上app_,原因不明)
8、 context.getExternalCacheDir().getAbsolutePath();
返回路径:/mnt/sdcard/Android/data/your.package.name/cache
没有就自动创建,需要android.permission.WRITE_EXTERNAL_STORAGE权限,不然返回空。
位于外置存储上,可用于保存较大的缓存文件
9、context.getExternalFilesDir(String type).getAbsolutePath();
返回路径: /mnt/sdcard/Android/data/your.package.name/files/type
其中最后的type文件夹可由参数type指定,由android.os.Environment类中定义的常量,如下:
10、context.getObbDir().getAbsolutePath();
返回路径:/mnt/sdcard/Android/obb/your.package.name
返回路径:/data
2、Environment.getDownloadCacheDirectory().getAbsolutePath();
返回路径: /cache
3、Environment.getRootDirectory().getAbsolutePath();
返回路径:/system
4、Environment.getExternalStorageDirectory().getAbsolutePath();
返回路径:/mnt/sdcard
5、Environment.getExternalStoragePublicDirectory(String type).getAbsolutePath();
返回路径:/mnt/sdcard/type
一、internal(内存储)
1.路径:/data/data/your.package.name/*,一般结构如下图
3.默认只有该app可以访问;
4.随app卸载而删除;
二、external(外存储)
1.关于/mnt/sdcard/、/sdcard//mnt 目录,linux默认挂载外部设备都会挂到这个目录下面去,如将sd卡挂载上去后,会生成一个/mnt/sdcard 目录。
/sdcard 目录是一个软链接,指向/mnt/sdcard 目录,即这个目录的内容就是sdcard的内容。
2.判断外存储是否可以卸载Environment.isExternalStorageRemovable();
3.不一定可用(用户可能把其挂载为USB存储设备或SD卡被移除,可使用Environment.getExternalStorageState()判断当前是否处于可用状态);
4.全局可读的,存在一定的安全隐患(可能被误删);
5.只有通过Context.getExternalCacheDir()保存的文件会随着app卸载而删除;
6.使用场景:
公共文件:app被卸载之后,文件保持对其他App可用(Envoronment.getExternalStoragePublicDirectory(String type));
私有文件:App在外存储的私有文件,由于尺寸较大不适合放在内存储 (Context.getExternalCacheDir());
三、Context路径(随app卸载而删除)
1、context.getFilesDir().getAbsolutePath();返回路径:/data/data/your.package.name/files
2、context.fileList();
返回/data/data/your.package.name/files目录下的所有文件名(包含文件夹)
3、context.deleteFile(String name);
删除/data/data/your.package.name/files目录下某一个文件/文件夹
4、context.openFileInput(String name) ;
返回 /data/data/your.package.name/files目录下的某一个文件(由参数name指定)的输入流(java.io.FileInputStream)
5、context.openFileOutput(String name, int mode);
返回/data/data/your.package.name/files目录下的某一个文件(由参数name指定)的输出流对象(java.io.FileOutputStream)
6、context.getCacheDir().getAbsolutePath();
返回路径:/data/data/your.package.name/cache
7、context.getDir("abc", Context.MODE_PRIVATE).getAbsolutePath();
返回路径:/data/data/your.package.name/app_abc
若没有该文件夹,自会自动创建(创建时会自动在abc前加上app_,原因不明)
8、 context.getExternalCacheDir().getAbsolutePath();
返回路径:/mnt/sdcard/Android/data/your.package.name/cache
没有就自动创建,需要android.permission.WRITE_EXTERNAL_STORAGE权限,不然返回空。
位于外置存储上,可用于保存较大的缓存文件
9、context.getExternalFilesDir(String type).getAbsolutePath();
返回路径: /mnt/sdcard/Android/data/your.package.name/files/type
其中最后的type文件夹可由参数type指定,由android.os.Environment类中定义的常量,如下:
android.os.Environment.DIRECTORY_MUSIC,
android.os.Environment.DIRECTORY_PODCASTS,
android.os.Environment.DIRECTORY_RINGTONES,
android.os.Environment.DIRECTORY_ALARMS,
android.os.Environment.DIRECTORY_NOTIFICATIONS,
android.os.Environment.DIRECTORY_PICTURES, or
android.os.Environment.DIRECTORY_MOVIES.
10、context.getObbDir().getAbsolutePath();
返回路径:/mnt/sdcard/Android/obb/your.package.name
四、Environment路径
1、Environment.getDataDirectory().getAbsolutePath();返回路径:/data
2、Environment.getDownloadCacheDirectory().getAbsolutePath();
返回路径: /cache
3、Environment.getRootDirectory().getAbsolutePath();
返回路径:/system
4、Environment.getExternalStorageDirectory().getAbsolutePath();
返回路径:/mnt/sdcard
5、Environment.getExternalStoragePublicDirectory(String type).getAbsolutePath();
返回路径:/mnt/sdcard/type