Android开发-数据存储方式一
2017-11-05 16:15
246 查看
在Android中,数据的存储分为两种方式: 1、直接以文件的形式存储在目录中 2、以json格式存储在数据库中 将数据以文件的存储又分为两种方式: 1、生成.txt文件 2、生成xml文件 那么今天就来详细的说一下以文件的形式存储,由于没有讲到数据库,在之后的课程中会讲到json格式存储在数据库中。 1、第一格:表示文件的类型 2、第2-4格:表示当前用户拥有的权限 3、第5-7格:表示当前用户所在组拥有的权限 4、第8-10格:表示其他用户拥有的权限 5、”r”:表示可读;”w”:表示可写;”x”:表示可执行;”-“:表示什么权限也没有,如果看到”rwx”就表示可读可写可执行,其他组合亦是如此 注意:不同的模式生成的文件的权限是不一样的,以及生成文件的类型的权限也是不一样的。 那么下面就详细的来说一下这几种方式 1、如图所示,当我们点击button按钮时触发文件的监听,这里的按钮就是简单的按钮,但是要记得设置onclick点击事件的属性哦~大家都不傻是吧………… 1)使用MODE_PRIVATE模式,生成一个私有的文件 3)使用MODE_WORLD_READABLE模式,生成一个readable文件 4)使用MODE_WORLD_WRITEABLE模式,生成一个writeable文件 部分代码说明
两种方式生成的xml文件是一样的,但是个人比较喜欢第二种方式,因为简单,就是简单,简单到Google工程师在开发文档中都不用写实例代码…… 在生成xml之前,大家先不要忘记了写一个实体类,不然你怎么封装数据?告诉我怎么封装………… 那么我们这里就直接上代码了(实体类自己写……) 2、使用Android封装好的XmlPullParser类
一、生成.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,使用MODE_PRIVATE模式,生成一个私有的文件 publicvoidclick1(Viewv){ try{ FileOutputStreamfos=openFileOutput("private.txt",MODE_PRIVATE); fos.write("private".getBytes()); fos.close(); }catch(Exceptione){ e.printStackTrace(); } }
2)使用MODE_PRIVATE模式,生成一个appent文件
//点击按钮2,使用MODE_PRIVATE模式,生成一个appent文件 publicvoidclick2(Viewv){ try{ FileOutputStreamfos=openFileOutput("appent.txt",MODE_PRIVATE); fos.write("appent".getBytes()); fos.close(); }catch(Exceptione){ e.printStackTrace(); } }
//点击按钮3,使用MODE_WORLD_READABLE模式,生成一个readable文件 publicvoidclick3(Viewv){ try{ FileOutputStreamfos=openFileOutput("readable.txt",MODE_WORLD_READABLE); fos.write("readable".getBytes()); fos.close(); }catch(Exceptione){ e.printStackTrace(); } }
//点击按钮4,使用MODE_WORLD_WRITEABLE模式,生成一个write文件 publicvoidclick4(Viewv){ try{ FileOutputStreamfos=openFileOutput("writeable.txt",MODE_WORLD_WRITEABLE); fos.write("writeable".getBytes()); fos.close(); }catch(Exceptione){ 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卡的路径: StringsdPath=Environment.getExternalStorageDirectory().getPath();
2、添加路径 Filefile=newFile(sdPath+"writeable.txt");
然后将路径写成这个就好了!就是这么简单
3、读取刚才写入的文件 在读取文件内容的时候,你写入的路径是什么,那么读的时候路径就是什么
try{ //Filefile=newFile("/data/data/com.test.filereadwrite/files/readable.txt"); Filefile=newFile("/data/data/com.test.filereadwrite/files/writeable.txt"); FileInputStreamfis=newFileInputStream(file); BufferedReaderbffr=newBufferedReader(newInputStreamReader(fis)); Stringcontent=bffr.readLine(); Toast.makeText(MainActivity.this,content,2000).show(); }catch(Exceptione){ e.printStackTrace(); }
4、路径优化 大家偶发现了我这里是直接写的路径,那么这样写并不是最优化的,那么要怎么才是更优化的呢,那么久只要改两行代码就好啦,例如: 1、获取路径: Stringpath=Context.getFilesDir().getPath();
2、添加路径: Filefile=newFile(path+"writeable.txt"); 注意:我们写的路径都应该是用优化的这种方式,而不应该写死,在这里我为了杀鸡儆猴哈哈哈~所以就写死了……但是效果都是一样的哇~~
二、生成xml文件
生成xml文件又可以分为两种方式: 1、使用原生StringBuffer拼接xml文件 2、使用Android封装好的XmlPullParser类两种方式生成的xml文件是一样的,但是个人比较喜欢第二种方式,因为简单,就是简单,简单到Google工程师在开发文档中都不用写实例代码…… 在生成xml之前,大家先不要忘记了写一个实体类,不然你怎么封装数据?告诉我怎么封装………… 那么我们这里就直接上代码了(实体类自己写……)
@Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化我们要备份的数据 smsLists=newArrayList<Sms>(); //插入测试数据 for(inti=0;i<10;i++){ Smssms=newSms(); sms.setAddress("10086"+i); sms.setBody("你好"+i); sms.setDate("201"+i); //把sms对象加入到集合中 smsLists.add(sms); } }1、使用原生StringBuffer拼接xml文件
//点击按钮button1,通过StringBuffer的方式生成一个xml文件
publicvoidclick1(Viewv){
//1创建一个StringBuffer对象
StringBuffersb=newStringBuffer();//开始组拼xml文件头
sb.append("<?xmlversion=\"1.0\"encoding=\"utf-8\"?>");
//开始组拼xml根节点
sb.append("<smss>");
//开始组拼sms节点以及子节点
for(Smssms: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{
Filefile=newFile(Environment.getExternalStorageDirectory().getPath(),"smsbackup.xml");
FileOutputStreamfos=newFileOutputStream(file);
fos.write(sb.toString().getBytes());
fos.close();
}catch(Exceptione){
e.printStackTrace();
}}
//点击按钮button2,通过XmlSerializer的方式生成xml文件
publicvoidclick2(Viewv){
try{
//获取XmlSerializer类的实例通过xml这个工具类去获取
XmlSerializerserializer=Xml.newSerializer();
//设置XmlSerializer序列化参数
Filefile=newFile(Environment.getExternalStorageDirectory().getPath(),"smsbackup.xml");
FileOutputStreamfos=newFileOutputStream(file);
serializer.setOutput(fos,"utf-8");
//开始写xml文档开头
serializer.startDocument("utf-8",true);
//写xml的根节点namespace命名空间
serializer.startTag(null,"smss");
//遍历sms节点以及子节点
for(Smssms: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(Exceptione){
e.printStackTrace();
}
}
那么这里就生成如下图的xml文件:[b]3、读取xml文件中的数据
[/b]
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);try{
//显示数据信息
TextViewtv_sms=(TextView)findViewById(R.id.tv_weather);
//通过上下文获取资产的管理者
InputStreamin=getAssets().open("smss.xml");
//调用我们定义解析xml的业务方法
List<Sms>smsLists=SmsParser.xmlParser(in);StringBuffersb=newStringBuffer();
for(Smssms:smsLists){
sb.append(sms.toString());
}//把数据显示到TextView上
tv_sms.setText(sb.toString());}catch(Exceptione){
e.printStackTrace();
}
}
部分代码说明: 这里我想教大家自己怎么去看开发文档……所以大家自己去看开发文档吧……哈哈哈~~
ps:这里我想说明一下,不是我不会,也不是偷懒,而是大家在以后企业开发的时候都是可以查看开发文档的,而且说实话Android中的东西真的很多很多,要全部记住那简直太难啦……
所以希望大家都能够自己学会查看开发文档……这也算是自己必修的一门课吧~~因为对于小白的我,学会了看文档就免得很多很多的麻烦,比如突然有一个东东不会……怎么办?哈哈哈……三、总结
1、生成.txt文件的4种方法和步骤 2、生成xml文件的2种方法和步骤 3、读取.txt文件 4、读取xml文件 5、将数据存放在本机和SD卡中 6、学会看开发文档 7、文件权限
相关文章推荐
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- Android开发中Android数据的四种存储方式
- Android开发数据的四种存储方式
- Android开发学习之路- Android数据存储方式总结
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式
- 在android开发中进行数据存储与访问的多种方式介绍
- Android开发中数据的5种存储方式简介.txt
- android开发中的5种存储数据方式
- Android开发笔记之Android中数据的存储方式(一)
- Android开发-之数据的存储方式一
- Android开发_Android数据存储5种方式
- (转)【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- Android开发之数据的存储方式详解
- Android开发笔记之Android中数据的存储方式(二)
- android开发数据存储方式
- Android开发_Android数据的四种存储方式
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- Android开发笔记之: 数据存储方式详解
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!