26 Android的本地存储
(参考:http://blog.csdn.net/zhaokaiqiang1992)
内部存储空间特性:
这部分空间总是可用的。
这里的文件默认是只能被你的APP所访问的。
当用户卸载APP的时候,系统会把内部存储里面的相关文件都清除干净。
内部存储是想确保不被用户与其他APP所访问的最佳存储区域。
读写内部存储不需要权限。
1 getFileDir() 通过此方法可以获取到你的APP内部存储的文件路径,路径为/data/data/pacgage_name/files
示例代码:
File file1 = new File(getFilesDir(), "getFilesDir.txt");
Log.d("TAG", "file1=" + file1.getAbsolutePath());
try {
OutputStream outputStream1 = new FileOutputStream(file1);
outputStream1.write("file".getBytes());
outputStream1.close();
} catch (Exception e) {
e.printStackTrace();
}
运行输出的Log如下:
file1=/data/data/demo6.qz.com.demo6/files/getFilesDir.txt
2 getCacheDir()通过此方法可以获取到你的APP内部缓存的文件路径,路径为/data/data/package_name/cache
示例代码:
File file2 = new File(getCacheDir(), "cache.txt");
Log.d("TAG", "file2=" + file2.getAbsolutePath());
try {
OutputStream outputStream1 = new FileOutputStream(file2);
outputStream1.write("cache".getBytes());
outputStream1.close();
} catch (Exception e) {
e.printStackTrace();
}
运行输出的Log如下:
file1=/data/data/demo6.qz.com.demo6/files/getFilesDir.txt
3 openFileOutput()通过此方法,可以获取到一个输出流,输出流的保存路径是/data/data/package_name/files,和getFileDir()的路径一致
示例代码如下
try {
OutputStream outputStream = openFileOutput("openFileOutput.txt", MODE_PRIVATE);
outputStream.write("openFileOutput".getBytes());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
运行结果:
APP的内部存储目录是以APP的包名作为标识存放在Android文件系统的特定目录下[data/data/com.example.xx]。从技术上讲,如果设置文件为可读的,那么其他APP就可以读取这个APP的内部文件。然而,其他APP需要知道此APP的包名与文件名。若是没有设置为可读或者可写,其他APP是没有办法读写的。因此只要使用MODE_PRIVATE模式,那么这些文件就不可能被其他APP所访问。
内部存储区域的数据在APP卸载的时候,会一块被删除,因此,可以在cache目录里面放置图片缓存。
cache与files的差别在于,如果手机的内部存储空间不够了,系统会自行选择cache目录进行删除,因此,不要把重要的文件放在cache文件里面,可以放置在files里面,因为这个文件只有在APP被卸载的时候才会被删除。
用户对APP进行更新操作时,内部存储区域的数据不会被删除,区别于被用户手动卸载。