Android文件存储
文件存储是Android中最基本的一种数据存储方式,它不读存储的内容进行任何的格式化处理,所有数据原封不动的保存在文件之中。如果想用文件存储的方式保存一些较为复杂的数据,就需要定义一套自己的格式规范,这样方便之后将数据从文件中解析出来。
一、将数据存储到文件中
context类提供一个openFileOutput()方法,可以用于将数据存储到指定文件中。openFileOutput()接收两个参数,第一个指定文件名,文件名不可以包含路径,因为所有的文件都是默认存储到/data/data/<package name>/files/目录下;第二个参数指定文件的操作模式,主要有两种模式可选,MODE_PRIVATE模式为默认模式,所写的内容将覆盖原文件的内容,MODE_APPEND表示如果该文件已经存在,则向文件中追加内容,如果不存在则新建一个文件。openFileOutput()返回一个FileOutputStream
1、Java中将流分为2种,即字节流,字符流,
字节流的中最小的字节单位是字节,而字符流的最小单位是一个字符,Java的字符采用unicode编码,一个字符占据2个字节。
字节流:InputStream,OutputStrem,
字符流:Reader,Writer


2. 如何选择IO流
1)确定是数据源和数据目的(输入还是输出)
源:输入流 InputStream Reader
目的:输出流 OutputStream Writer
2)明确操作的数据对象是否是纯文本
是:字符流Reader,Writer
否:字节流InputStream,OutputStream
3)明确具体的设备。
是硬盘文件:File++:
读取:FileInputStream,, FileReader,
写入:FileOutputStream,FileWriter
是内存用数组
byte[]:ByteArrayInputStream, ByteArrayOutputStream
是char[]:CharArrayReader, CharArrayWriter
是String:StringBufferInputStream(已过时,因为其只能用于String的每个字符都是8位的字符串), StringReader, StringWriter
是网络用Socket流
是键盘:用System.in(是一个InputStream对象)读取,用System.out(是一个OutoutStream对象)打印
3)是否需要转换流
是,就使用转换流,从Stream转化为Reader,Writer:InputStreamReader,OutputStreamWriter
4)是否需要缓冲提高效率
是就加上Buffered:BufferedInputStream, BufferedOuputStream, BuffereaReader, BufferedWriter
二、将数据从文件中读出来
context提供一个openFileInput()方法读取文件的内容,只有一个形参,即要读取的文件名称。返回一个FileInputStream流,通过这个流来读取文件内容。
三、示例代码如下
public class MainActivity extends AppCompatActivity {
EditText edit1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit1 = (EditText) findViewById(R.id.edit1);
String data = load();
if(!TextUtils.isEmpty(data)){
edit1.setText(data);
edit1.setSelection(data.length());
}
}
@Override
protected void onDestroy() {
super.onDestroy();
save(edit1.getText().toString());
}
public void save(String data){
BufferedWriter writer = null;
FileOutputStream out = null;
try {
out = openFileOutput("storage_test",MODE_APPEND);
writer = new BufferedWriter(new OutputStreamWriter(out));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
writer.write(data);
} catch (IOException e) {
e.printStackTrace();
}
if (writer!=null){
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public String load(){
FileInputStream in = null;
BufferedReader reader = null;
StringBuffer content = new StringBuffer();
try {
in = openFileInput("storage_test");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
reader = new BufferedReader(new InputStreamReader(in));
String data = "";
try {
while ((data = reader.readLine())!=null){
content.append(data);
}
} catch (IOException e) {
e.printStackTrace();
}
if(reader!=null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return content.toString();
}
}
Android文件存储的更多相关文章
- Android 文件存储浅析
最近做的一个需求和文件存储有关系.由于之前没有系统梳理过,对文件存储方面的知识一直很懵懂.趁着周末有时间,赶紧梳理一波. 这首从网上找到的一张图,很好的概括了外部存储和内部存储. 下面我们再来具体介绍 ...
- android: 文件存储
数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑 关机的情况下,这些数据仍然不会丢失.保存在内存中的数据是处于瞬时状态的,而保存在 存储设备中的数据是处于持久状态的,持久化 ...
- android文件存储位置切换
最近有个需求,助手的google卫星地图和OpenCycleMap下载的离线地图数据,要能够在内置存储和外置存储空间之间切换,因为离线瓦片数据非常大,很多户外用户希望将这些文件存储在外置TF卡上,不占 ...
- 转:Android文件存储路径getFilesDir()与getExternalFilesDir的区别
作为一个开发者,我们经常需要通过缓存一些文件到SD卡中,常见的方式就是,通过: File sdCard = Environment.getExternalStorageDirectory(); 获取S ...
- android 文件存储&SharedPreferences
一.文件存储 文件存储主要是I/O流的操作,没什么好说的,需要注意的是保存文件的各个目录. 下面为常用的目录: public static File getInFileDir(Context cont ...
- 程序员带你学习安卓开发系列-Android文件存储
这是程序员带你学习安卓开发系列教程.本文章致力于面向对象程序员可以快速学习开发安卓技术. 上篇文章:.Net程序员快速学习安卓开发-布局和点击事件的写法 主要讲解了布局和点击事件的写法. 上篇文章补充 ...
- Android文件存储使用参考
可能遇到的问题 android系统自身自带有存储,另外也可以通过sd卡来扩充存储空间.前者好比pc中的硬盘,后者好移动硬盘. 前者空间较小,后者空间大,但后者不一定可用. 开发应用,处理本地数据存取时 ...
- Android 文件存储 和 权限管理
转载请标明出处: :http://blog.csdn.net/huaiyiheyuan/article/details/52473984 android SD卡主要有两种存储方式 Internal . ...
- Android数据存储之Android 6.0运行时权限下文件存储的思考
前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以 ...
随机推荐
- 夺命雷公狗-----React_native---4---初始化项目
我们首先在android目录下创建一个apps的文件夹: 然后我们在apps目录下,按住shift键加鼠标右键选择--在此打开命令窗口输入命令初始化项目 然后就是等了................. ...
- curl 模拟请求get/post
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx24a0ef ...
- 【日常小记】linux中强大且常用命令:find、grep【转】
转自:http://www.cnblogs.com/skynet/archive/2010/12/25/1916873.html 在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍fin ...
- 关于iBatis.NET连接各数据库时提示没找到数据库驱动的依赖文件
iBatis.net在连接oracle数据库时使用的是:oracleClient1.0 这个是系统自带的驱动,配置上即可,使用的连接配置为: <database> <provider ...
- RobotFramework中加载自定义python包中的library(一个py文件中有多个类)
结构如下: appsdk\ appsdk.py(这里面有多个类,包括appsdk,appsdksync等类) __init__.py ... ① 有个appsdk的文件夹(符合python包的定义) ...
- Dynamics AX 2012 R3 仓库和运输管理系列 - 仓库管理模块安装与配置
在AX 2012 R3版本中,新增了仓库和运输管理模块,同时提供了一个在移动设备上进行仓库管理工作的网站.在这个系列里,与Reinhard一起,了解仓库和运输管理模块吧. 需要注意的是 ...
- 用java代码手动控制kafkaconsumer偏移量
为应对消费结果需要存储到关系数据库中,避免数据库down时consumer继续消费的场景 http://kafka.apache.org 查了很多源码都记录下来,省的下次还要过滤源码. //如果将结果 ...
- python操作文件案例二则
前言 python 对于文件及文件夹的操作. 涉及到 遍历文件夹下所有文件 ,文件的读写和操作 等等. 代码一 作用:查找文件夹下(包括子文件夹)下所有文件的名字,找出 名字中含有中文或者空格的文件 ...
- js阻止form表单重复提交
防止表单重复提交的方法总体来说有两种,一种是在js中阻止重复提交:另一种是在后台利用token令牌实现,大致思路是生成一个随机码放到session和form表单的隐藏输入框中,提交表单时两者对比,表单 ...
- 小结一下前段时间做的rpgdemo
虽然说已经是彻底放弃继续做那个demo了(代码结构混乱,想增加新功能非常的不方便),不过还是花了一点心血在里面的,毕竟这是我开始学习unity游戏制作的初衷,不过果然是学的越多越发现自己的不足... ...