在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、文件权限
 

Android开发-之数据的存储方式一的更多相关文章

  1. Android笔记——Android中数据的存储方式(二)

    我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...

  2. Android笔记——Android中数据的存储方式(一)

    Android中数据的存储方式 对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用. 总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其 ...

  3. Android的数据的存储方式

    数据的存储方式,总的来说分为三种: ① 文件存储: * SharedPreferences存储 * SD卡存储 ---- Environment * 数据库存储 ---- SQLite .MySQL. ...

  4. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  5. Matlab中数据的存储方式

    简介 MATLAB提供了丰富的算法以及一个易于操作的语言,给算法研发工作者提供了很多便利.然而MATLAB在执行某些任务的时候,执行效率偏低,测试较大任务量时可能会引起较长时间的等待.未解决这个问题, ...

  6. Android开发_Android数据的四种存储方式

    Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File.由于Android系统中,数据基本都是私有的的,都是存放 ...

  7. Android笔记——Android中数据的存储方式(三)

    Android系统集成了一个轻量级的数据库:SQLite,所以Android对数据库的支持很好,每个应用都可以方便的使用它.SQLite作为一个嵌入式的数据库引擎,专门适用于资源有限的设备上适量数据存 ...

  8. Android开发8:数据存储(二)——SQLite数据库和ContentProvider的使用

    前言 啦啦啦各位小伙伴们许久不见了~学期末和过年期间自己忙着做其他事没能及时更新Android开发系列课程的博客,实在是罪过罪过~ 好啦~废话不多说,进入我们今天的主题.今天我们将和大家学习其他的数据 ...

  9. iOS开发系列-常见离线存储方式

    概述 在很多社交App手机在手机没有网络时,重新启动应用,依然能否展示上次访问的数据,提高用户体验,这个就是离线数据存储的运用场景.在iOS开发中常见的离线存储技术有Plist存储.个人偏好存储.解归 ...

随机推荐

  1. dedecms循环列表样式

    简单用法: {dede:arclist typeid="1" row="} <li class="list[field:global.autoindex/ ...

  2. 使用MonkeyTest对Android客户端进展压力测试

    Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试. 先来看一条 ...

  3. window下xampp配置多端口、多站点步骤

    好些日子没整理知识了,许多新东西不整理出来时间一长就淡忘了.看来以后得继续坚持整理. 配置XAMPP多端口.多站点如下步骤: 多端口: (一个域名下同时配置多个端口,从而达到访问不同程序) 效果例如: ...

  4. Asp.Net Mvc + ComBoost.Mvc快速开发

    ComBoost项目地址 http://comboost.wodsoft.com https://github.com/Kation/ComBoost/tree/develop 准备工作 首先,在Vi ...

  5. bzoj2342还是马拉车

    就好比第一次写主席树的时候写了30行,第二次写了5行 这次马拉车只剩下 ,id=,mx=;i<=n;i++) { -i],mx-i):;a[i-p[i]]==a[i+p[i]+];p[i]++) ...

  6. iOS XMPP 通信协议实现 图形化直观感受

    第一次随笔,实在不知写点什么有用的东西,那就分享一下本人最近的研究所得吧! 是关于iOS-XMPP-通信协议的实现,具体代码比较复杂,三言两句也实在难表达清楚,网上已有很多关于iOS XMPP协议的讲 ...

  7. C# winform安装部署(转载)

    c# winform 程序打包部署 核心总结: 1.建议在完成的要打包的项目外,另建解决方案建立安装部署项目(而不是在同一个解决方案内新建),在解决方案上右击-〉添加-〉现有项目-〉选择你要打包的项目 ...

  8. 封装一些常用的js工具函数-不定时更新(希望大家积极留言,反馈bug^_^)

    /*华丽------------------------------------------------------------------------------------------------ ...

  9. notepad++崩溃后文件内容变为NUL的解决方法

    毫无疑问,notepad++是一款非常优秀的文本编辑器,但是notepad++有时候会崩溃,之后文件内容就会全部变成NUL 当你打文件看到自己辛辛苦苦的成果全都变成NUL是不是有想哭的感觉?" ...

  10. Odoo 二次开发教程(五)-新API的介绍与应用

    [关于odoo新API的介绍,Internet上资料很少,或者不够完整详实,这会对初学者造成很大的困惑,本篇的目的就是希望能帮助新手了解新API的大概] odoo 新api的实现是借助于python装 ...