Android数据保存:SharedPreference,文件保存,数据库保存
今天就介绍一下文件保存:主要用到的File API
File
对象适合按照从开始到结束的顺序不跳过地读取或写入大量数据。 例如,它适合于图片文件或通过网络交换的任何内容.
所有 Android 设备都有两个文件存储区域:“内部”和“外部”存储。这些名称在 Android 早期产生,当时大多数设备都提供内置的非易失性内存(内部存储),以及移动存储介质,比如微型 SD 卡(外部存储)。一些设备将永久性存储空间划分为“内部”和“外部”分区,即便没有移动存储介质,也始终有两个存储空间,并且无论外部存储设备是否可移动,API 的行为均一致。(引用自Android Developer Training).这样就可以得出数据保存可以放在内部存储和外部存储俩种方式:
1.将文件保存在内部存储中:
在内部存储中保存文件时,可以通过一下俩种方式获取相应的目录:
getFilesDir()
返回表示您的应用的内部目录的 File 。
getCacheDir()
返回表示您的应用临时缓存文件的内部目录的 File。
在这些目录中新建文件,用File() API;
String filename = "myfile";
String string = "Hello world!";
FileOutputStream outputStream;
try {
outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
outputStream.write(string.getBytes());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
缓存文件
:createTempFile();
File file = File.createTempFile(fileName, null, context.getCacheDir());
myContext.deleteFile(fileName);
2.将文件保存在外部存储中:
外部存储:必须确认其容量
/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state) ||
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
return true;
}
return false;
}
外部存储文件可以保存为公共文件和私有文件,保存公共文件调用
getExternalStoragePublicDirectory()
,保存文件私有文件调用
getExternalFilesDir()
;
删除文件:
myFile.delete();
注:当用户卸载您的应用时,Android 系统会删除以下各项:
- 您保存在内部存储中的所有文件
- 您使用
getExternalFilesDir()
保存在外部存储中的所有文件。
但是,您应手动删除使用 getCacheDir()
定期创建的所有缓存文件并且定期删除不再需要的其他文件