Android开发手记(17) 数据存储二 文件存储数据
Android为数据存储提供了五种方式:
1、SharedPreferences
2、文件存储
3、SQLite数据库
4、ContentProvider
5、网络存储
本文主要介绍如何使用文件来存储数据。Android文件操作用到的是Java.IO中的FileOutputStream和FileInputStream类。
一、存储文件
首先实例化一个FileOutputStream。
FileOutputStream foStream = openFileOutput(fileName, MODE_PRIVATE);
// fileName: 要写入文件的名称
// MODE_PRIVATE: 为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
// MODE_APPEND: 模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
// MODE_WORLD_READABLE: 表示当前文件可以被其他应用读取,不推荐使用
// MODE_WORLD_WRITEABLE: 表示当前文件可以被其他应用写入,不推荐使用
然后调用foStream.write()即可完成写入。
byte[] buffer = fileContent.getBytes();
foStream.write(buffer);
Toast.makeText(MainActivity.this, "写入成功",Toast.LENGTH_SHORT).show();
最后进行一些清理工作,刷新写出流和关闭流。
foStream.flush();
foStream.close();
二、读取文件
同样的,首先实例化一个FileInputStream。
FileInputStream fiStream = openFileInput(fileName);
然后调用fiStream.read()即可
int len = fiStream.available();
byte[] buffer = new byte[len];
fiStream.read(buffer);
最后,将文本显示并关闭读文件流
etContent.setText(new String(buffer));
Toast.makeText(MainActivity.this, "读取成功",Toast.LENGTH_SHORT).show();
fiStream.close();
三、完整代码
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; import java.io.FileInputStream;
import java.io.FileOutputStream; public class MainActivity extends AppCompatActivity { private EditText etName;
private EditText etContent;
private Button btnWrite;
private Button btnRead;
private String fileName = "";
private String fileContent = ""; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); etName = (EditText)findViewById(R.id.etName);
etContent = (EditText)findViewById(R.id.etContent);
btnWrite = (Button)findViewById(R.id.btnWrite);
btnRead = (Button)findViewById(R.id.btnRead); btnWrite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
fileName = etName.getText().toString();
fileContent = etContent.getText().toString();
try {
FileOutputStream foStream = openFileOutput(fileName, MODE_PRIVATE);
byte[] buffer = fileContent.getBytes();
foStream.write(buffer);
Toast.makeText(MainActivity.this, "写入成功",Toast.LENGTH_SHORT).show();
foStream.flush();
foStream.close();
}catch(Exception e){
e.printStackTrace();
}
}
});
btnRead.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
fileName = etName.getText().toString();
try{
FileInputStream fiStream = openFileInput(fileName);
int len = fiStream.available();
byte[] buffer = new byte[len];
fiStream.read(buffer);
etContent.setText(new String(buffer));
Toast.makeText(MainActivity.this, "读取成功",Toast.LENGTH_SHORT).show();
fiStream.close();
}catch(Exception e){
e.printStackTrace();
}
}
}); }
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/etName"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:text="文件名" /> <EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/etContent"
android:layout_below="@+id/etName"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:text="文件内容" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存"
android:id="@+id/btnWrite"
android:layout_alignTop="@+id/btnRead"
android:layout_toLeftOf="@+id/btnRead"
android:layout_toStartOf="@+id/btnRead" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="读取"
android:id="@+id/btnRead"
android:layout_below="@+id/etContent"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
activity_main.xml
Android开发手记(17) 数据存储二 文件存储数据的更多相关文章
- Android 学习第17课,使用文件的数据存储(4种存储模式)
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中.可以使用Context ...
- Android开发艺术探索笔记——View(二)
Android开发艺术探索笔记--View(二) View的事件分发机制 学习资料: 1.Understanding Android Input Touch Events System Framewo ...
- Android开发手记(18) 数据存储三 SQLite存储数据
Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 SQLite 是以嵌入式为目的 ...
- Android开发手记(20) 数据存储五 网络存储
Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 安卓的网络存储比较简单,因为A ...
- android 开发-数据存储之文件存储
android的文件存储是通过android的文件系统对数据进行临时的保存操作,并不是持久化数据,例如网络上下载某些图片.音频.视频文件等.如缓存文件将会在清理应用缓存的时候被清除,或者是应用卸载的时 ...
- Android开发手记(19) 数据存储四 ContentProvider
转载自:http://www.cnblogs.com/devinzhang/archive/2012/01/20/2327863.html Android为数据存储提供了五种方式: 1.SharedP ...
- Android开发手记(16) 数据存储一 SharedPreferences
Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 SharedPreferenc ...
- [ Android 五种数据存储方式之二 ] —— 文件存储数据
关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的. 文件可用来存放大量数据,如文本.图片.音 ...
- Android数据存储之Android 6.0运行时权限下文件存储的思考
前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以 ...
随机推荐
- JW Player 现在支持 Azure 媒体服务
Vishal Sood Azure媒体服务首席项目经理 此合作伙伴关系是关于什么内容? Azure媒体服务现已支持一些最常见的流媒体格式,其中包括 Microsoft SmoothStreaming ...
- Linux停SVN提交时强制写日志
Linux下SVN提交时强制写日志 SVN默认可以不写注释提交,有时候可能忘记写注释,有的人也没有写注释的习惯,导致翻看history的时候都不知道做了哪些更改,可以依照以下步骤修改SVN配置,强制提 ...
- ASP.NET(C#) GridView (编辑、删除、更新、取消)
转自:http://my.oschina.net/dldlhrmc/blog/93458 前台代码 view source print? 01 <%@ Page Language=" ...
- android学习——eclipse的svn的搭建
一.svn 的在线安装 下面为在线安装SVN插件. 以下是一些关键步骤: 其中http://subclipse.tigris.org/update_1.8.x是SVN插件的下载站点[subclipse ...
- Intersoft Mobile Studio 2013 R1 SP1 Crack
Intersoft Mobile Studio 2013 R1 SP1 (iOS, Android & WinR) Leave a comment tweet inShare ...
- Keepass TAN 记录的使用
之前一直不知道 Keepass 软件中这个“TAN”是做什么用的,今天看了帮助文档,然后通过维基百科,有了一些大致的了解. 简单来说,一个 TAN 记录用于某些网站增加安全操作使用的.常规下只要用户名 ...
- 18. 4Sum
#include <string>#include <stack>#include <vector>#include <map>#include < ...
- struts1与strut2的区别
struts1和struts2是两个完全不同的框架 struts1工作流程:发布Struts Web服务时,根据web.xml初始化ActionServlet,ActionContext等内容.在接到 ...
- SparkContext的初始化过程分析(源码)
SparkContext的构造函数中,最重要的入参是SparkConf 根据初始化入参生成SparkConf 再根据SparkConf来创建SparkEnv TaskScheduler.start ...
- hdoj 1286 找新朋友【欧拉函数】
找新朋友 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...