Android的储存
- 内部储存
1 | context.getFilesDir(); |
注意:读写上述的方法返回的文件对象是,不用申请权限,当用户卸载app时,系统会删除data目录下所有关于该app的文件
- 外部储存的私有目录
1 | context.getExternalCacheDir()://一般存放临时缓存数据,对应 清除缓存 |
与上述的对应方法的不同点
- 系统一般不会清理在里面的文件
- 用户可能操作在里面的文件,使用时应该加个非空判断
- 获取WRITE_EXTERNAL_STORAGE的其他应用可以操作该文件
注意: 随应用卸载后删除
- type的取值
type:(可以为null,为null时: /storage/emulated/0/Android/data/com.example.androidbase/files)
1 | DIRECTORY_MUSIC, 为DIRECTORY_MUSIC时:/storage/emulated/0/Android/data/com.example.androidbase/files/Music |
- 外部储存的公共目录
1 | /** |
- 因为外部存储可能是不可用的,比如遇到SD卡被拔出等情况时。因此在访问之前应对其可用性进行检查。
1 | /*检查外部存储是否可以读写*/ |
- 查询剩余空间
如果事先知道想要保存的文件大小,可以通过执行getFreeSpace() or getTotalSpace() 来判断是否有足够的空间来保存文件,从而避免发生IOException。那些方法提供了当前可用的空间还有存储系统的总容量。然而,系统并不能保证可以写入通过getFreeSpace()查询到的容量文件, 如果查询的剩余容量比我们的文件大小多几MB,或者说文件系统使用率还不足90%,这样则可以继续进行写的操作,否则最好不要写进去。
并没有强制要求在写文件之前去检查剩余容量。我们可以尝试先做写的动作,然后通过捕获 IOException 。这种做法仅适合于事先并不知道想要写的文件的确切大小。例如,如果在把PNG图片转换成JPEG之前,我们并不知道最终生成的图片大小是多少。
- 手动删除文件
在不需要使用某些文件的时候应删除它。删除文件最直接的方法是直接执行文件的delete()方法。
myFile.delete();
如果文件是保存在internal storage,我们可以通过Context来访问并通过执行deleteFile()进行删除
Context.deleteFile(fileName);
更详细的可以参考: