数据存储是我们在开发过程中肯定都会遇到的事情,不管是对文件的读写,还是对数据库的操作,都涉及到对数据的操作。这里,我们就来总结一下Android中,对数据保存的方式有哪些。
从我的认知角度来说,要保存我们的数据,一共有4种方式:
- file 使用文件存储的方式
- SD-file 在SD中进行文件操作(同上,属于文件操作)
- SharePreference 一种XML键值对的方式储存
- SQL数据库
- ContentProvider 数据提供器
file
file是最基本,也是最基本最通用的一种数据存储的方式,不过也是使用起来最为麻烦的一种方式。为什么要说麻烦呢?因为你只能通过读取文本的方式知道里面的东西,而且如果是储存的变量数据的话,你还要自己辨认这是什么类型变量,然后在转换为自己需要的变量,当然,你也可以通过序列化的方式,将其储存在一个对象中。
所以文件的储存方式常常被我们用来存储一写简单的,或者是二进制的数据。
写入
在Android,我们可以通过openFileOutput的方法,来将我们当前应用的文件进行操作。
常用方式:
BufferedWriter writer = null;
FileOutputStream data = null;
try {
data = openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(data));
writer.write("haozhiqiang!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (writer!=null ){
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
里面有一个疑问你肯定也已经发现了,我们并没有在里面写明我们文件储存的位置。噫!其实这是Android的一种便利的方式,因为文件最终都会储存在/data/data/包名/项目名/files/这个文件夹之下。
打开文件,我们就可以看见我们刚才所写的东西。
然后还有一个问题,openFileOutput的第二参数是什么意思?,这个其实就是我们的对文件写入的模式,有MODE_PRIVATE和MODE_APPEND,很好理解,private表示我们写文件的时候,从最开始的地方开始写,如果文件里面有东西的话,就直接覆盖掉。append呢,表示我们每次添加内容的时候,从文件的最下方,接着添加内容。嘛嘛,很容易理解。
这就是file的写入操作,很简单吧,我们在看看读取的操作。
读取
同样,使用Android给我们的提供的方法,不过这一次是用的是openFileInput。
常用方式:
FileInputStream data = null ;
BufferedReader bufferedReader = null;
try {
data = openFileInput("data");
bufferedReader = new BufferedReader(new InputStreamReader(data));
String s = bufferedReader.readLine();
System.out.println(s);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (bufferedReader!=null ){
bufferedReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
还是很容易理解对不对。这里也没有写文件路径,只是写了文件的名字,所以他也是直接在工程的/files文件夹之下进行查找文件。而且我们也没有写读取方式,因为只是读取并没有对文件进行操作本来就是安全的,所以也就没有特殊的读取模式。
总结:
1.file操作其实就是直接对文件进行操作,我们的可以通过Android给我们提供的openFileInput和openFileOutput方式直接存储在/files文件夹之下。
2.我们也可以直接使用java的方式,直接使用IO流进行操作,这时候 我就需要自己找到文件夹的位置。IO流的操作可以参考我之前的文章。
sharedPreferences
sharedPrefrences是一种基于xml的方式,采用键值对的方式的储存,可以理解为一个可以储存在文件中的Map。所以我们在储存的时候,是按照规定的类型写进去,读取的时候,也是直接读出来的数据。但是使用方法超简单的好嘛,比file方式还简单。
使用
三步走:
1.获得sharedPreferencesEdit
2.进行写入或者是读取
3.关闭sharedPreferencesEdit
读取
**