Android-文件存储

Android常见的数据存储方式:

  • 系统配置暂存的轻量级存储,SharedPreferences。
  • 系统中的中小型存储机制,File存储。
  • 系统中的相对大型存储机制,SQLite。

目录

1 SharedPreferences

1.1适用情况

1.2使用

1.2.1 SharedPreferences的本程序内写入方式:

1.2.2 SharedPreferences的本程序内读取方式:

1.3 本质

1.4 读写其它应用程序的SharedPreferences的步骤

2 File存储

2.1 应用程序内部的数据文件的读写

2.2 SD卡上的文件读写

2.2.1SD卡和手机存储空间的优缺点:

2.2.2 读写SD卡上的文件的步骤:

2.2.3读写SD卡上的文件的注意事项:

3 SQLite

3.1 简介

3.2 操作

3.2.1 操作方法

3.2.2操作步骤

3.3 事务处理


1 SharedPreferences

是一种轻量级数据存储机制

1.1适用情况

  • 要存储的数据格式简单。
  • 都是普通的字符串,标准类型的值。
  • 一般用来存储应用程序的配置信息等。

1.2使用

SharedPreferences存储数据采用key/value的形式

SharedPreferences本身是一个接口,无法创建实例,一般通过的getSharedPreferences()方法获得实例,其中形式有:

  • MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
  • MODE_MULTI_PROCESS:多进程形式.
  • MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.
  • MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入

SharedPreferences接口本身没有提供写入数据的能力,而是通过一个内部接口Editor类的对象来实现的。

通过SharedPreferences的edit()方法获得本对象的Editor对象。

1.2.1 SharedPreferences的本程序内写入方式:

prefenences = getSharedPreferences(sharename, MODE_PRIVATE);
Editor ed = preferences.edit();
ed.put***(key,value);
ed.commit();

1.2.2 SharedPreferences的本程序内读取方式:

prefenences = getSharedPreferences(sharename, MODE_PRIVATE);
value = preferences.get***(key,default);

1.3 本质

SharedPreferences的本质是文件读写。

位置是 /data/data/<packagename>/shared_prefs/shared_name

1.4 读写其它应用程序的SharedPreferences的步骤

  1. 前提创建的SharedPreferences全区可读写的。
  2. 创建对应的Context。 context =creatPackageContext(包名, 权限);
  3. 通过context.getSharedPreferences获得对象。
  4. 如需读出数据。 value = preferences.get***(key,default); 如需写入数据。 Editor ed = preferences.edit(); ed.put***(key,value);

2 File存储

同JavaSE一样,Android对于文件的操作通过流来实现。

  • FileInputStream
  • FileOutPutStream

一般常见的Android的文件处理分为两类:

  • 本应用程序内部的数据文件。
  • SD卡上的文件。

2.1 应用程序内部的数据文件的读写

Context提供了如下两个方法来获得文件的IO流:

  1. FileInputStream openFileInput(name)
  2. FileoutPutStream openFileOutput(name,mode)
  • MODE_RPIVTE:该文件只能被当前程序读写。
  • MODE_APPEND:以追加的方式打开该文件,允许应用程序向  该文件中追加内容。
  • MODE_WORLD_READABLE:该文件可以被其他程序读取。
  • MODE_WORLD_WRITEABLE:该文件可以被其他程序读写。

Context提供了如下方法来访问数据文件夹

  • getDir(name, mode) :在应用程序的数据文件夹下获取name对应的子目录。
  • File getFilesDir() :获取应用程序数据文件夹的绝对路径。
  • String[] fileList():返回应用程序数据文件夹的全部文件。
  • deleteFile(String) :删除应用程序数据文件夹某个文件。

2.2 SD卡上的文件读写

SD卡(Secure Digital Memory Card)是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地用于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。

2.2.1SD卡和手机存储空间的优缺点:

SD卡存储速度相对较慢,但是空间相对较大。

SD卡在使用过程中需要进行检查和判断。

2.2.2 读写SD卡上的文件的步骤:

判断是否手机插入SD卡,并且程序有读写SD卡的权限。

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

获得SD卡的外部目录getExternalStorageState()。

使用常用的流操作进行SD卡的文件读写。

  • FileInputStream
  • FileOutputStream
  • FileReader
  • FileWriter

2.2.3读写SD卡上的文件的注意事项:

手机插入SD卡,在AVD中通过mksdcard命令来创建。

获得读写SD卡的权限需要在AndroidManifest.xml中添加读写权限。

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

 

3 SQLite

3.1 简介

SQLite,是一款轻型的数据库,它的设计目标是嵌入式产品,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。

3.2 操作

3.2.1 操作方法

Android中使用SQLiteDatabase代表数据库,并且提供一系列的方法来操作数据:

3.2.2操作步骤

获取SQLiteDatabase对象,它代表与数据库的连接。

调用SQLiteDatabase的方法来执行SQL语句。

操作SQL语句的执行结果。

关闭SQLiteDatabase,回收资源。 

3.3 事务处理

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。

SQLiteDatabase采用如下方法来控制事务:

  • beginTransaction()
  • endTransaction()
  • inTransaction()
  • setTransactionSuccessful()
db.beginTransaction();
try {
	// 执行事务中的很多sql语句
	db.setTransactionSuccessful();
} finally {
	db.endTransaction();
}

3.4 OpenHelper类

  • SQLiteDatabase中判断表是否存在的话使用try-catch方式判断是否有异常。
  • Android提供SQLiteOpenHelper类来管理数据库。主要负责数据库的创建、版本更新,一般情况通过创建它的子类并扩展onCreate()和onUpgrade()方法来实现。
  • SQLiteOpenHelper类常用方法:
  1. SQLiteDatabase  getReadableDatabase()。
  2. SQLiteDatabase  getWritableDatabase()。
  3. abstract void onCreate():第一次创建数据库的回调。
  4. abstract void onUpgrade():数据库版本更新的回调。
  5. void close():关闭所有打开的SQLiteDatabase。

这样的话大家使用SQLiteOpenHelper来操作数据,就无需使用SQLiteDatabase的静态方法创建数据库实例了。

注意:

用getReadableDatabase, getWriteableDatabase打开数据库时,如果数据库的磁盘空间满了就会打开失败。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值