Android中的五种存储方式和各自的特点
一:简介
内置硬盘:需要自己控制内置硬盘缓存文件
外置硬盘:手机共享的文件,例如照片
Shared preferences:以键值对的方式保存私有的数据,存储简单的键值对xml,可以存储boolen float int long
Database:保存有规模的私有数据库,推荐使用Room persistence library
除了硬盘的数据,其他的方式都是为了存储私有的数据,ContentProvider可以用来控制数据的权限.
二.具体内容
1.硬盘
:
:一直都是存在的,文件只能被当前的app获取,卸载APP的时候会删除
:不一定一直是存在的,共享读取的,如果使用getExternalFilesDir() 获取存储路径卸载APP的时候会顺带删除
的安装路径默认是内置硬盘,但是也可以指定到外置硬盘,通过在manifest 文件中指定Android:installLocation
:
app的包名决定的,而且保存在Android文 件系统中一个特定的位置.
获取app内置硬盘的一个路径
获取暂存文件路径,需要控制在不需要的时候删除给定的 文件,并且创建文件的时候一定要制定一个size限度.
,可以使用File()构造函数,新建一个file,指定路径和名称.
File file = new File(this.getFilesDir(),filename);
openFileOutput()方法打开一个输出流,从app中输出文件到指定 的路径并规定文件名,这个方法自动输出到内置硬盘的app路径,这一点可 以从Context.java类以及中看出.返回的是当前Context的路径.
String fileName=”text.txt”;
String fileContent=”Hello World!”;
FileOutPutStream fos;
try{
fos = openOutPut(fileName,Context.MODE_PRIVATE);
fos.write(fileContent.getBytes());
fos.close();
}catch(Exception e){
e.printStrackTrace();
}
7.0以上的版本中不存在Context.MODE_PRIVATE之外的 其他权限了.
:
createTempFile()创建
public void setTempFile(Context context, String uri){
File file;
try{
String fileName = uri.parse(url).getLastPathSegment();
file = File.createTempFile(filename,null,context.getCacheDir());
}catch(Exception e){
e.printStackTrace();
}
}
,存储空间不足时会自动删除临时文件.并 且在使用过后应当立即删除.
:
在APP安装的时候就可见的文件可以存放在 res/raw/当中.
都是在当前app的路径
3).外置硬盘
1. 请求权限
2. 确认存储区域是可用的
以及更高不需要读写权限,以下的需要权限,需要在Manifest文件 中获取权限后加上最高sdk的属性
<user-permission android:name=”......”
android:maxSdkVersion=”18”/>
:
if(Environment.getExternalStorage().equals(Environment.MEDIA _MOUNTED);
:
getExternalStoragePublicDirectory(),这个方法需要指定保存文件 的类型.
File file = new File(Environment.getExternalStoragePublicDirectory(Environmen t.TYPE),fimeName);
”.name”,可以避免被找到.
:
getExternalFilesDir()
选择多重的存储位置
API19 getExternalFilesDirs();
ContextCompat.getExternalFilesDirs();
:
getFreeSpace()/getTotalSpace().
:
delete();