本篇文章主要介绍了 Android 开发之数据的存储方式,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用 "安卓" 或 "安致"。
在 Android 中,数据的存储分为两种方式:
1、直接以文件的形式存储在目录中
2、以 json 格式存储在数据库中
将数据以文件的存储又分为两种方式:
1、生成. txt 文件
2、生成 xml 文件
那么今天就来详细的说一下以文件的形式存储,由于没有讲到数据库,在之后的课程中会讲到 json 格式存储在数据库中。
一、生成. txt 文件
文件的生成无非就是我们 Java 中学习的输入输出流中的一部分,有 Java 基础相信都是很容易理解的,因为它真的很简单啦~~
1、生成目录可以分为两种:
1)本机
2)SD 卡
2、生成. txt 文件的方式又可以分为 4 种
1)使用 MODE_PRIVATE 模式,生成一个私有的文件
2)使用 MODE_PRIVATE 模式,生成一个 appent 文件
3)使用 MODE_WORLD_READABLE 模式,生成一个 readable 文件
4)使用 MODE_WORLD_WRITEABLE 模式,生成一个 writeable 文件
在生. txt 文件之前,我们有必要先了解一下文件的权限,如下图:
1、第一格:表示文件的类型
2、第 2-4 格:表示当前用户拥有的权限
3、第 5-7 格:表示当前用户所在组拥有的权限
4、第 8-10 格:表示其他用户拥有的权限
5、"r":表示可读;"w":表示可写;"x":表示可执行;"-":表示什么权限也没有,如果看到 "rwx" 就表示可读可写可执行,其他组合亦是如此
注意:不同的模式生成的文件的权限是不一样的,以及生成文件的类型的权限也是不一样的。
那么下面就详细的来说一下这几种方式
1、如图所示,当我们点击 button 按钮时触发文件的监听,这里的按钮就是简单的按钮,但是要记得设置 onclick 点击事件的属性哦~ 大家都不傻是吧…………
1)使用 MODE_PRIVATE 模式,生成一个私有的文件
- //点击按钮1,使用MODE_PRIVATE模式,生成一个私有的文件
- public void click1(View v){
- try {
- FileOutputStream fos = openFileOutput("private.txt", MODE_PRIVATE);
- fos.write("private".getBytes());
- fos.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
2)使用 MODE_PRIVATE 模式,生成一个 appent 文件
- //点击按钮2,使用MODE_PRIVATE模式,生成一个appent文件
- public void click2(View v){
- try {
- FileOutputStream fos = openFileOutput("appent.txt", MODE_PRIVATE);
- fos.write("appent".getBytes());
- fos.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
3)使用 MODE_WORLD_READABLE 模式,生成一个 readable 文件
- //点击按钮3,使用MODE_WORLD_READABLE模式,生成一个readable文件
- public void click3(View v){
- try {
- FileOutputStream fos = openFileOutput("readable.txt", MODE_WORLD_READABLE);
- fos.write("readable".getBytes());
- fos.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
4)使用 MODE_WORLD_WRITEABLE 模式,生成一个 writeable 文件
- //点击按钮4,使用MODE_WORLD_WRITEABLE模式,生成一个write文件
- public void click4(View v){
- try {
- FileOutputStream fos = openFileOutput("writeable.txt", MODE_WORLD_WRITEABLE);
- fos.write("writeable".getBytes());
- fos.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
部分代码说明
FileOutputStream: 文件输出流
openFileOutput("private.txt", MODE_PRIVATE):openFileOutput 是 Android 中封装好的文件输出流,private.txt 就是生成的文件名,MODE_PRIVATE 这个就是上面说到的模式啦!
fos.write("private".getBytes()):write 就是写入什么内容,这里的参数就是你要写入的文本内容,getBytes()………………^_^ 不知道自己去看 Java 基础吧哈哈哈~~~
close():关闭流对象
try-catch:有异常,try 一下……
MODE_WORLD_WRITEABLE,MODE_WORLD_READABLE:这两个模式已经被废弃了…… 没有那么多为什么!哈哈哈……
感觉自己萌萌哒…… 实在不会的就复习 Java 基础吧!
那么这里就生成了如下图所示的 4 个文件
2、将文件存储在 SD 卡
1、获取 SD 卡的路径:
- String sdPath = Environment.getExternalStorageDirectory().getPath() ;
2、添加路径
- File file = new File(sdPath + "writeable.txt");
然后将路径写成这个就好了!就是这么简单
3、读取刚才写入的文件
在读取文件内容的时候,你写入的路径是什么,那么读的时候路径就是什么
- try {
- //File file = new File("/data/data/com.test.filereadwrite/files/readable.txt");
- File file = new File("/data/data/com.test.filereadwrite/files/writeable.txt");
- FileInputStream fis = new FileInputStream(file);
- BufferedReader bffr = new BufferedReader(new InputStreamReader(fis));
- String content = bffr.readLine();
- Toast.makeText(MainActivity.this, content, 2000).show();
- } catch (Exception e) {
- e.printStackTrace();
- }
4、路径优化
大家偶发现了我这里是直接写的路径,那么这样写并不是最优化的,那么要怎么才是更优化的呢,那么久只要改两行代码就好啦, 例如:
1、获取路径:
- String path = Context.getFilesDir().getPath();
2、添加路径:
- File file = new File(path + "writeable.txt");
注意:我们写的路径都应该是用优化的这种方式,而不应该写死,在这里我为了杀鸡儆猴哈哈哈~ 所以就写死了…… 但是效果都是一样的哇~~
二、生成 xml 文件
生成 xml 文件又可以分为两种方式:
1、使用原生 StringBuffer 拼接 xml 文件
2、使用 Android 封装好的 XmlPullParser 类
两种方式生成的 xml 文件是一样的,但是个人比较喜欢第二种方式,因为简单,就是简单,简单到 Google 工程师在开发文档中都不用写实例代码……
在生成 xml 之前,大家先不要忘记了写一个实体类,不然你怎么封装数据?告诉我怎么封装…………
那么我们这里就直接上代码了(实体类自己写……)
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- //初始化我们要备份的数据
- smsLists = new ArrayList<Sms>();
- //插入测试数据
- for (int i = 0; i < 10; i++) {
- Sms sms = new Sms();
- sms.setAddress("10086"+i);
- sms.setBody("你好"+i);
- sms.setDate("201"+i);
- //把sms对象加入到集合中
- smsLists.add(sms);
- }
- }
1、使用原生 StringBuffer 拼接 xml 文件
- //点击按钮button1,通过StringBuffer的方式生成一个xml文件
- public void click1(View v){
- //1创建一个StringBuffer对象
- StringBuffer sb = new StringBuffer();
- //开始组拼xml文件头
- sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
- //开始组拼xml根节点
- sb.append("<smss>");
- //开始组拼sms节点以及子节点
- for (Sms sms : smsLists) {
- sb.append("<sms>");
- //组拼addressa节点
- sb.append("<address>");
- sb.append(sms.getAddress());
- sb.append("</address>");
- //组拼body节点
- sb.append("<body>");
- sb.append(sms.getBody());
- sb.append("</body>");
- //组拼date节点
- sb.append("<date>");
- sb.append(sms.getDate());
- sb.append("</date>");
- sb.append("</sms>");
- }
- //smss节点结束
- sb.append("</smss>");
- //把数据保存到SD卡中
- try {
- File file = new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup.xml");
- FileOutputStream fos = new FileOutputStream(file);
- fos.write(sb.toString().getBytes());
- fos.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
2、使用 Android 封装好的 XmlPullParser 类
- //点击按钮button2,通过XmlSerializer的方式生成xml文件
- public void click2(View v){
- try {
- //获取XmlSerializer类的实例 通过xml这个工具类去获取
- XmlSerializer serializer = Xml.newSerializer();
- //设置XmlSerializer序列化参数
- File file = new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup.xml");
- FileOutputStream fos = new FileOutputStream(file);
- serializer.setOutput(fos,"utf-8");
- //开始写xml文档开头
- serializer.startDocument("utf-8", true);
- //写xml的根节点 namespace 命名空间
- serializer.startTag(null, "smss");
- //遍历sms节点以及子节点
- for (Sms sms : smsLists) {
- serializer.startTag(null, "sms");
- //组拼addressa节点
- serializer.startTag(null, "address");
- serializer.text(sms.getAddress());
- serializer.endTag(null, "address");
- //组拼body节点
- serializer.startTag(null, "body");
- serializer.text(sms.getBody());
- serializer.endTag(null, "body");
- //组拼date节点
- serializer.startTag(null, "date");
- serializer.text(sms.getDate());
- serializer.endTag(null, "date");
- serializer.endTag(null, "sms");
- }
- serializer.endTag(null, "smss");
- //結束xml結尾
- serializer.endDocument();
- //关闭流
- fos.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
那么这里就生成如下图的 xml 文件:
3、读取 xml 文件中的数据
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- try {
- //显示数据信息
- TextView tv_sms = (TextView) findViewById(R.id.tv_weather);
- //通过上下文 获取资产的管理者
- InputStream in = getAssets().open("smss.xml");
- //调用我们定义 解析xml的业务方法
- List<Sms> smsLists = SmsParser.xmlParser(in);
- StringBuffer sb = new StringBuffer();
- for (Sms sms : smsLists) {
- sb.append(sms.toString());
- }
- //把数据显示到TextView上
- tv_sms.setText(sb.toString());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
部分代码说明:
这里我想教大家自己怎么去看开发文档…… 所以大家自己去看开发文档吧…… 哈哈哈~~
ps: 这里我想说明一下,不是我不会,也不是偷懒,而是大家在以后企业开发的时候都是可以查看开发文档的,而且说实话 Android 中的东西真的很多很多,要全部记住那简直太难啦……
所以希望大家都能够自己学会查看开发文档…… 这也算是自己必修的一门课吧~~ 因为对于小白的我,学会了看文档就免得很多很多的麻烦,比如突然有一个东东不会…… 怎么办?哈哈哈……
三、总结
1、生成. txt 文件的 4 种方法和步骤
2、生成 xml 文件的 2 种方法和步骤
3、读取. txt 文件
4、读取 xml 文件
5、将数据存放在本机和 SD 卡中
6、学会看开发文档
7、文件权限
来源: http://www.phperz.com/article/17/0317/310648.html