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是需要动态申请权限,所以以 ...
随机推荐
- 关于header跳转之后的乱码
http://www.360doc.com/content/11/0603/19/7052474_121495648.shtml 问题:不同网站的跳转出现乱码,不同编码的页面传递参数也出现乱码 搞清楚 ...
- 【数学】Matrix Multiplication
Matrix Multiplication Time Limit: 2000MS Memory Limit: 65536K Total S ...
- OC-01 编译链接的作用
编译:检测代码的语法合法性,随后生成.o文件. 链接:把项目中所有的.out合并,生成一个可执行文件. OC编译连接过程 .m---->.o---->.out . 检测源文件的语法合法性 ...
- centos5安装salt-master
本篇文档主要解决2个问题: 1. centos5通过yum安装的master版本肯定低于centos6安装的minion,所以必须升级salt-master 2. zeromq版本太低会报这个错 20 ...
- [C#] Control.Invoke方法和跨线程访问控件(转载)
转载前,在网上找了好多INVOKE方法的文章,就这个看着还可以,明白了大概,以后再深用的时候再研究 ,废话少说上转载(连转载都说的这么有气势,哈哈) 在设计界面时,我们经常需要将一些需要时间才能完 ...
- TOAD和PLSQL 默认日期显示、rowid显示、TNSNAME的修改
先说下要解决的问题: select rowid,acct_id,state_date from acct; 修改后,1)sql指明rowid,可以显示出来 2)时间格式显示为YYYYMMDD HH24 ...
- C# 调用Excel 出现服务器出现意外情况. (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT)
C# 调用Excel 出现服务器出现意外情况. (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT) private Microsoft.Office.Intero ...
- solr 4.6的安装配置
从网上看了很多资料,很多都是老的.自己也算是结合着弄出来了. 1.下载的准备工作 tomcat8.solr4.6 具体的下载自己去找去吧.或者后期我在提供. 2.开始配置 tomcat路径:E:\ ...
- 还是this的问题
var name = "The Window"; var object = { name : "My Object", getNameFunc ...
- (转)深入浅出 妙用Javascript中apply、call、bind
原文连接 深入浅出 妙用Javascript中apply.call.bind 网上文章虽多,大多复制粘贴,且晦涩难懂,我希望能够通过这篇文章,能够清晰的提升对apply.call.bind的认识,并且 ...