数据存储——文件存储
来源:互联网 发布:erp是什么软件 编辑:程序博客网 时间:2024/06/07 03:20
Android 系统中主要提供了三种方式用于简单地实现数据持久化功能,即文件存储、SharedPreference 存储以及数据库存储。
还可以将数据保存在手机的SD 卡中,不过使用以上三种方式来保存数据会更简单一些,而且会更加的安全。
文件存储
存储数据到文件中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件中的,因而比较适合用于存储一些简单的文本数据或二进制数据。
Context类的openFileOutput (String name, int mode)用于将数据存储到指定的文件中。
name为文件名(不包含路径),所有的文件都是默认存储到/data/data/<package name>/files/ 目录下。
mode为文件的操作模式,MODE_PRIVATE是默认的操作模式,表示当指定同样文件名的时候,所写入的内容将会覆盖原文件中的内容;
MODE_APPEND 则表示如果该文件已存在就往文件里面追加内容,不存在就创建新文件。MODE_WORLD_READABLE 和MODE_WORLD_WRITEABLE危险,被弃用。
openFileOutput ()方法返回的是一个FileOutputStream 对象,得到了这个对象之后,可以使用Java 流的方式将数据写入到文件中。
以下是一段简单的代码示例,展示了如何将一段文本内容保存到文件中:
//通过openFileOutput()方法得到一个FileOutputStream对象,然后再借助它构建出一个OutputStreamWriter对象,接着再使用OutputStreamWriter构建出一个BufferedWriter对象,这样就可以通过BufferedWriter来将文本内容写入到文件中了。 public void save() { String data = "这是一个数据"; FileOutputStream out; OutputStreamWriter osw; BufferedWriter writer = null; try { out = openFileOutput("文件名.txt", Context.MODE_PRIVATE); //得到一个FileOutputStream对象out osw = new OutputStreamWriter(out); //构建出一个OutputStreamWriter对象osw writer = new BufferedWriter(osw); //构建出一个BufferedWriter对象writer writer.write(data); //通过BufferedWriter的write()方法将文本内容写入到文件中 } catch (IOException e) { e.printStackTrace(); } finally { try { if (bw != null) { //此处,所以bw必须初始化赋值 bw.close(); } } catch (IOException e) { e.printStackTrace(); } }}
例子A:
布局中仅仅一个EditText。
在文本输入框中随意输入点什么内容,再按下Back 键,这时输入的内容就已经丢失了,因为它只是瞬时数据,在活动被销毁后就会被回收。而以下程序,就是在数据被回收之前,将它存储到文件当中。
以下文件中的"文件名.txt"存储在/data/data/com.example.a/files/目录下
public class MainActivity extends AppCompatActivity { @BindView(R.id.et_edit) EditText etEdit; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); } @Override protected void onDestroy() { super.onDestroy(); String text = etEdit.getText().toString(); save(text); //保证在活动销毁之前一定会调用这个方法 } private void save(String text) { FileOutputStream out; BufferedWriter writer = null; OutputStreamWriter osw; try { out = openFileOutput("文件名.txt", MODE_APPEND); osw = new OutputStreamWriter(out); writer = new BufferedWriter(osw); writer.write(text); } catch (IOException e) { e.printStackTrace(); } finally { try { if (writer != null) { writer.close(); } } catch (IOException e) { e.printStackTrace(); } } }}
从文件中读取数据
Context类的openFileInput(String name)方法。
系统会自动到/data/data/<package name>/files/目录下去加载这个文件,并返回一个FileInputStream 对象,再通过Java 流读取数据。
public String load() { FileInputStream in; BufferedReader reader = null; StringBuilder content = new StringBuilder(); try { in = openFileInput("文件名.txt"); reader = new BufferedReader(new InputStreamReader(in)); String line = ""; while ((line = reader.readLine()) != null) { content.append(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return content.toString();}
例子A是在文本框输入数据,然后退出程序时会保存数据,在A的代码下,加入以下代码,让再次进入程序的时候,刚刚输入的文本还能在文本编辑框显示
1.在onCreate()下添加
load();etEdit.setText(content.toString());
2.加入读取方法load()
StringBuilder content;public String load() { FileInputStream in; BufferedReader reader = null; content = new StringBuilder(); try { in = openFileInput("文件名.txt"); reader = new BufferedReader(new InputStreamReader(in)); String line = ""; while ((line = reader.readLine()) != null) { content.append(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return content.toString();}
- Android数据存储——文件存储
- 数据存储——文件存储
- android数据存储——文件存储
- 数据存储——文件存储
- android数据存储—文件存储
- Android中数据存储——文件存储数据
- Android中数据存储——文件存储数据
- 数据存储—读写内部存储的文件数据
- 数据存储-文件存储
- 数据存储--文件存储
- Android 数据存储操作(2)——文件存储
- Android学习14——数据存储之文件存储
- Android数据存储——2.文件存储_A_文本文件
- Android数据存储访问——文件存储
- Android数据存储访问——文件存储
- Android开发——数据存储之文件存储
- Android数据存储方式之——文件存储
- Android安卓——数据存储之文件存储
- OKVIS Reprojection Error
- javaEE基础servlet之ServletConfig
- 类型信息之instanceof、isInstance与isAssignableFrom
- 初学构建小项目之仓库管理系统货物类型管理功能实现(三)
- 在switch语句中使用字符串以及实现原理
- 数据存储——文件存储
- 61.[PHP]PHP 程序的运行方式
- 第六十三篇:S32V234汽车电子应用功能挖掘的相关文章:双目立体、雷达视觉融合、ADAS集成
- Picasso加载圆角图片
- Matlab与线性代数 -- 矩阵的水平连接和垂直连接
- Hadoop伪分布环境部署之Hadoop
- 模块的内聚和耦合
- Angular2(三)--依赖注入
- 软件工程——软件设计