Android开发学习教程(30)- Android数据存储的几种方式
—— 十七岁全力以赴,十八岁好好庆祝,Fighting!
Android存储android四大组件之一,所以它的数据存储方式在介绍四大组件的时候说明。
1、文件存储
文件存储不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件当中的,因而它比较适合用于存储一些简单的文本数据或二进制数据。文件存储有两种方式,一是存储到手机内存中(memory),一是存储到sd卡中。
1.1 存储到手机内存中
Context类中提供了一个 openFileOutput()方法,可以用于将数据存储到指定的文件中:
openFileOutput(name, mode):
name:是文件名,注意这里指定的文件名不可以包含路径,因为所有的文件都是默认存储到/data/data/<
package
name=
""
>/files/(等价于 getFilesDir())目 录下 的
mode:是文件的操作模式 ,MODE_PRIVATE:默认的操作模式,同名文件内容会被覆盖。MODE_APPEND则表示 如果该文件已存在就往文件里面追加内容,不存在就创建新文件。
</
package
>
public
void
save(String data) {
FileOutputStream out =
null
;
BufferedWriter writer =
null
;
try
{
out = openFileOutput(
"content"
, Context.MODE_PRIVATE);
writer =
new
BufferedWriter(
new
OutputStreamWriter(out));
writer.write(data);
}
catch
(IOException e) {
e.printStackTrace();
}
finally
{
try
{
if
(writer !=
null
) {
writer.close();
}
}
catch
(IOException e) {
}
}
}
public
String read() {
FileInputStream in =
null
;
BufferedReader reader =
null
;
StringBuilder content =
new
StringBuilder();
try
{
in = openFileInput(
"content"
);
reader =
new
BufferedReader(
new
InputStreamReader(in));
String line =
""
;
while
((line = reader.readLine()) !=
null
) {
content.append(line);
}
}
catch
(IOException e) {
e.printStackTrace();
}
finally
{
if
(reader !=
null
) {
try
{
reader.close();
}
catch
(IOException e) {
e.printStackTrace();
}
}
}
return
content.toString();
}
1.2 存储到手机SD卡中
前面说的存储到手机内存,数据是存储在应用程序内的,文件大小受到限制,而且数据随着程序的卸载而自动清除;当要存储大的文件时,或者想数据不会随着程序的卸载而自动清除就可以使用sd卡方式存储了。使用sd卡存储主要是使用Environment这个类的功能。
注:在Android6.0之后读写SD卡等危险的操作需要动态申请存储等权限。否则可能会报异常java.io.FileNotFoundException: /storage/emulated/0/test: open failed: EACCES (Permission denied)
第 1 步:在AndroidManifest清掉中添加所需权限
<uses-permission android:name=
"android.permission.READ_EXTERNAL_STORAGE"
>
<uses-permission android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
>
</uses-permission></uses-permission>
第 2 步:动态申请权限
requestPermissions(
new
String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},
101
);
第 3 步:使用Environment获取SD目录,读写数据:
public
void
save(String data) {
try
{
// 获取SDcard路径
File sdCardDir = Environment.getExternalStorageDirectory();
// SDCard目录:/mnt/sdcard
String sdcardPath = sdCardDir.getAbsolutePath();
File file =
new
File(sdCardDir,
"test"
);
RandomAccessFile raf =
new
RandomAccessFile(file,
"rw"
);
// 将文件记录指针移动最后
raf.seek(file.length());
// 输出文件内容
raf.write(data.getBytes());
raf.close();
}
catch
(Exception e) {
e.printStackTrace();
}
}
public
String read() {
StringBuilder sb =
new
StringBuilder();
// 获取SDcard路径
try
{
File sdCardDir = Environment.getExternalStorageDirectory();
File file =
new
File(sdCardDir,
"test"
);
InputStream inputStream =
new
FileInputStream(file);
int
len =
0
;
byte
[] buffer =
new
byte
[
1024
];
while
((len = inputStream.read(buffer)) != -
1
) {
sb.append(
new
String(buffer,
0
, len));
}
// 关闭流
inputStream.close();
}
catch
(Exception e) {
e.printStackTrace();
}
return
sb.toString();
}
2、SharedPreferences存储
SharedPreferences类,它是一个轻量级的存储类,适合用于保存软件配置参数。SharedPreferences是使用键值对的方式来存储数据的,存储数据是以xml文件形式存储,文件存放在/data/data/your package name/shared_prefs目录下。
public
void
save(String data) {
SharedPreferences preferences = getSharedPreferences(
"test"
, MODE_APPEND);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(
"content"
, data);
editor.commit();
}
public
String read() {
SharedPreferences preferences = getSharedPreferences(
"test"
, MODE_PRIVATE);
return
preferences.getString(
"content"
,
""
);
}
源码链接:https://yunjunet.cn/876833.html