第五章 以数据为中心—数据存取(1)

第五章以数据为中心—数据存取

典型的桌面操作系统提供一种公共文件系统——任何应用软件可以使用它来存储和读取文件,该文件也可以被其它的应用软件所读取(会有一些权限控制设定)。而Android 采用了一种不同的系统。在Android 中,所有的应用软件数据(包括文件)为该应用软件所私有。然而,Android 同样也提供了一种标准方式供应用软件将私有数据开放给其它应用软件。这一章将描述一个应用软件存储和获取数据、开放数据给其他应用软件、从其他应用软件请求数据并且开放它们的多种方式。

可供选择的存储方式有:文件存储、SQLite 数据库方式、SharedPreferences、content provider(内容提供器)。我们将在本章详细的进行介绍。

5.1文件操作

5.1.1读写一般的文本文件

先来看下Java语言对于文件或文件夹操作的常用API:


String path = File.getPath();//相对路径

String path = File.getAbsoultePath();//绝对路径

String parentPath = File.getParent();//获得文件或文件夹的父目录

String Name = File.getName();

File.mkDir();//建立文件夹

File.createNewFile();//建立文件

File.isDirectory();//判断是文件或文件夹

File[] files = File.listFiles();//列出文件夹下的所有文件和文件夹名

File.renameTo(dest);//修改文件夹和文件名

File.delete();//删除文件夹或文件

在Android中,也常常会对SD卡下的文件进行操作:


Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);

// 判断SD卡是否插入

File skRoot = Environment.getExternalStorageDirectory(); //获得sd卡根目录

File fileRoot = Context.getFilesDir()+"//"; //获得私有根目录

和传统的Java 中实现I/O 的程序类似,在Android中,其提供了openFileInput 和openFileOuput方法读取设备上的文件。

下面看个例子代码,具体如下所示:


String FILE_NAME = "tempfile.tmp";//确定要操作文件的文件名

FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_PRIVATE);//初始化

FileInputStream fis = openFileInput(FILE_NAME);//创建写入流


经验分享:

默认情况下,使用openFileOutput()方法创建的文件只能被其调用的应用使用,其它应用无法读取这个文件,如果需要在不同的应用中共享数据,可以使用Content Provider 实现,关于Content Provider 我们将在稍后的内容中介绍。

Android的文件操作要有权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

在Android开发中,资源文件一般放在哪里?

如果你的应用需要一些额外的资源文件,例如,一些用来测试你写的音乐播放器是否可以正常工作的MP3 文件,可以将这些文件放在应用程序的/res/raw/下,如mydatafile.mp3。那么就可以在你的应用中使用getResources 获取资源后,以openRawResource方法(不带后缀的资源文件名)打开这个文件,实现代码如下所示:


Resources myResources = getResources();

InputStream myFile = myResources.openRawResource(R.raw.myfilename);

--------------------------------------------

程序员赚钱不易 一定要学会理财

平安陆金所 隶属于平安集团的p2p平台

年投资回报率7%-9% 是替代银行理财的首选

个人经验 推荐投资安鑫或者有担保的彩虹项目

不要投资安e 那个几乎无法转让 想提前提现非常困难

网站链接 http://affiliate.lufax.com/action/36XBU

首次投资1000元即可额外赚几百元 不赚白不赚

--------------------------------------------

下面我们来看下个例子,读取目录/res/raw/下的资源文件test.txt。


// import略

public class ReadTextTest extends Activity {

public static final int REFRESH = 0x000001;

private TextView text = null;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

text = new TextView(this);

text.setBackgroundColor(0xff000000);

text.setTextColor(0xffffffff);

text.setGravity(Gravity.CENTER);

InputStreamReader inputStreamReader = null;

InputStream inputStream = getResources().openRawResource(R.raw.test);

try {

inputStreamReader = new InputStreamReader(inputStream, "utf-8");

} catch (UnsupportedEncodingException e1) {

e1.printStackTrace();

}

BufferedReader reader = new BufferedReader(inputStreamReader);

StringBuffer sb = new StringBuffer("");

String line;

try {

while ((line = reader.readLine()) != null) {

sb.append(line);

sb.append("\n");

}

} catch (IOException e) {

e.printStackTrace();

}

text.setText(sb.toString());

setContentView(text);

}

}

在/res/raw/目录下新建test.txt文件,加入“测试读取txt文件”文字,保存为UTF-8的格式。

图 5-1为程序运行的结果:

图 5-1 读取txt文档的结果

时间: 2024-12-09 19:13:18

第五章 以数据为中心—数据存取(1)的相关文章

第五章 以数据为中心—数据存取(2)

5.1.2结构性的文件-读写XML文件 通过上面的介绍我们可以自由的操作Android中普通的文本文件了,下面我们来介绍下Android中比较常用的结构性的文件-XML文件. XML,可扩展标记语言(Extensible Markup Language),用于标记电子文件,使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. AndroidSDK提供了如下package来支持XML的读写: l  javax.xml  根据XML规范定义核心X

第五章 以数据为中心—数据存取(5)

5.2.3添加.删除和修改操作 下面具体说明如何进行添加.删除.修改的操作.下面我们将这些动作封装在一个类DBHelper中,通过这个类的几个方法,可以具体看到如何进行数据库的各种操作. // import略 public class DBHelper { private static final String[] COLS = new String[] { "_id","name"}; private SQLiteDatabase db; private fina

第五章 以数据为中心—数据存取(6)

5.3安全方便简单-使用SharedPreferences 前面操作文件和数据库都相对比较复杂,需要打开,读取,关闭等等操作.可能有人就想,如果我只是需要存取几个简单的数据,有没有简单点的方法呢?的确,在Android中也封装了一种轻便的数据存取的方法-Preferences. Preferences是一种轻量级的数据存储机制,它将一些简单数据类型的数据,包括boolean类型.int类型.float类型.long类型以及String类型的数据,以键值对的形式存储在应用程序的私有Preferen

第五章 以数据为中心—数据存取(3)

5.1.3自由操作随心所欲-序列化和反序列化 在Android开发中,除了经常会操作普通的文本文件和XML文件以外,也会经常使用序列化和反序列化的方式传递或者存取数据. Android序列化对象主要有两种方法,实现Serializable接口.或者实现Parcelable接口.实现Serializable接口是Java SE本身就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高,而且还可以用在IPC中.实现Serializable接口非常简单,声

第五章 以数据为中心—数据存取(4)

5.2通用的数据操作方式-数据库 说到数据的存取,数据库肯定是一个常用的解决方案.Android中也有它自己的数据库,下面我们来看看Android中的数据库与一般的数据库有什么不一样的地方. 5.2.1SQLite数据库介绍 目前在Android系统中集成的是SQLite3版本,它支持SQL语句,它是一个轻量级的嵌入式数据库.SQLite支持NULL.INTEGER.REAL.TEXT和BLOB数据类型,不支持静态数据类型,而是使用列关系.可以把SQLite数据库近似看成是一种无数据类型的数据库

第七章 以数据为中心的程序设计

本章介绍 ■ 表示和处理文档 ■ 设计不可变数据结构 ■ 数据表示形式之间的转换 ■ 使用记录和递归差别联合 在设计函数式程序时,首先要考虑的是程序处理的数据:由于重要的程序都使用数据,因此,在应用程序设计中,这个方面极为重要.用函数语言实现程序,我们也是从设计在代码中用到的数据结构开始:下一步才会写处理数据的运算. 但是不同于面向对象的设计,它是把数据封装在对象的状态中:处理用方法表示,是对象的一部分,在运算中还可以和其他有关对象进行交互.而大多数函数式程序是以数据为中心的,因此,数据与运算明

第五章 数据存储

第五章 数据存储 我们用解析器解析出数据之后,接下来的一步就是对数据进行存储了,保存的形式可以多种多样,最简单的形式可以直接保存为文本文件,如 TXT.Json.CSV 等等,另外还可以保存到数据库中,如关系型数据库 MySQL,非关系型数据库 MongoDB.Redis 等等.那么本章我们就来统一了解一下数据的保存方式. 5.1 文件存储 文件存储形式可以是多种多样的,比如可以保存成 TXT 纯文本形式,也可以保存为 Json 格式.CSV 格式等,本节我们来了解下文本文件的存储方式. 5.1

第五章:大数据 の HBase 进阶

本课主题 HBase 读写数据的流程 HBase 性能优化和最住实践 HBase 管理和集群操作 HBase 备份和复制 引言 前一篇 HBase 基础 (HBase 基础) 简单介绍了NoSQL是什么和重点讨论 HBase 数据库的特点,在这一篇会进一步介绍 HBase 的其他特性和机制,比如读写数据的流程,在读写过程中 WAL,MemStore 的作用,还会谈谈一些数据缓存机制,明白在什么场景下需要用那一种缓存策略?如何对频繁使用的数据进行快速响应,从检索上提升查询效率和从内存层面上运用不同

大数据日知录【第五章:分布式协调系统】笔记--如何当选老大?如何加入组织?如何将组织的意愿传递下去

Chubby: 保持高可用性和可靠性,不追求读写的高吞吐量,所有的读写请求都有主控服务器完成,其他的备份服务器在内存中维护和主控服务器完全一致的树形结构,此时从属服务器的作用在于系统的整体的可靠性. Zookeeper: 每一个节点都可以处理读请求,写请求只能由主控服务器处理,此时从属服务器的作用在于提高系统读的吞吐量(有可能会导致读取的数据是老数据). Zookeeper主要应用场景: 选举老大 配置管理:配置文件存储在某个节点上,其他节点都是观察者,启东市可以读取也可以订阅改配置消息. 组成