数据存储的几种方式:
1、SharedPreferences共享参数
2、File文件的方式
3、数据库
4、ContentProvide
5、网络存储
存储目录:
SharedPreferences--->/data/data/packageName/shared_prefs
File--->/data/data/packageName/files
数据库--->/data/data/packageName/databases
SharedPreferences的方式存储数据:
SharedPreferences存储数据是以xml文件格式存放数据,使用Map数据结构,以键值对的方式存储
使用方法:
首先要获取SharedPreferences和edit对象:
SharedPreferences sp = getSharedPreferences("my_sp",MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
getSharePreference();方法有两个参数第一个参数是要存储的文件名,上面说过sharePreference是以xm格式存储文件的,这个参数就是存储之后生成的xml文件的文件名;第二个参数是存储模式,有四个取值分别是:
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,写入的内容会覆盖源文件的内容
Context.MODE_APPEND:会检查模式是否存在,存在就就往文件追加新内容,否则就创建新文件
Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取
Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他文件写入
操作:SharePreferences存储数据是通过获取Editor编辑器对象来操作的。
插入数据:
调用Editor.putxxxx方法,两个参数分别为键和值。
获取数据:
调用Editor.getxxxx方法,两个参数分别为键和不存在指定键时的默认值。
删除数据:
调用Editor.remove方法,参数为指定的键。
清空所有数据:
调用Editor.clear方法
上述所有方法调用都要执行Editor.commit()或者Edit.apply()方法来提交。
apply()和commit的区别:apply是将修改数据原子提交到内存,而后异步真正提交到硬件磁盘;而commit是同步的提交到硬件磁盘,因此,在多个并发的提交commit的时候,他们会等待正在处理的commit保存到磁盘后在操作,从而降低了效率。而apply只是原子的提交到内容,后面有调用apply的函数的将会直接覆盖前面的内存数据,这样从一定程度上提高了很多效率;apply方法不会提示任何失败的提示。
File文件的方式:
通过file文件方式将数据存储到手机上,分为两种方式:内置存储(存储到运行内存中)和外置存储(存储到SD卡中)
当文件被保存在内部存储中时,默认情况下,文件是应用程序私有的,其他应用不能访问。当用户卸载应用程序时这些文件也跟着被删除。
* 在Android的api中已经提供了两个访问内置文件目录(/data/data/packageNama/files)的方法
* openFileInput 获取files文件夹下文件的输入流
* openFileOutput 获取files文件夹下文件的输出流
向内置存储中写文件:
try {
FileOutputStream fos = openFileOutput("my_text", Context.MODE_PRIVATE);
String content = "文件存储方式练习";
fos.write(content.getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
调用openFileOutput()方法返回文件输出流FileOutputStream,调用FileOutputStream.write()将文件以byte字节的形式写入内存中,最后调用close()函数关闭流。
在 openFileOutput(String name, int mode)方法中
name参数: 用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。
mode参数:用于指定操作模式,分为四种:MODE_PRIVATE、MODE_APPEND、MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE,等同于SharePreferences的四种数据存储模式。
从内置存储中读取文件:
try {
FileInputStream fis = openFileInput("my_text");
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
String content = new String(buffer);
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
调用openFileInput()方法返回文件输出流FileInputStream,调用FileInputStream.read()将读取到的字节数据放到字节数组当中,最后调用close()函数关闭流。
在 openFileInput(String name)方法中
name参数: 用于指定文件名称,不能包含路径分隔符“/”
外置存储读写文件:
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File sdCardDir = Environment.getExternalStorageDirectory();//获取SDCard目录 "/sdcard"
File saveFile = new File(sdCardDir,"a.txt");
//写数据
try {
FileOutputStream fos= new FileOutputStream(saveFile);
fos.write("fanrunqi".getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
//读数据
try {
FileInputStream fis= new FileInputStream(saveFile);
int len =0;
byte[] buf = new byte[1024];
StringBuffer sb = new StringBuffer();
while((len=fis.read(buf))!=-1){
sb.append(new String(buf, 0, len));
}
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
3、数据库存储
4、ContentProvide
ContentProvide
5、网络存储
网络存储就是将数据通过网络请求保存到后台服务器中的存储方式,一般的网络请求方式有httpUrlConnection和httpClient
手机内置存储的九大公有目录:
DCM存储照片
Download默认下载路径
Music
Movices
Pictures
Notification
Ringtones铃声
Environment.java