Android中数据存储方式
第4章 Android中的数据存储

第4章Android中的数据存取程序是数据的输入、处理、输出的过程,不管是操作系统还是应用程序,都不可避免要用到大量的数据。
由于内存容量有限,且一旦关机,内存中的信息都消失,因此,一般把需要下次使用的数据保存在磁盘(对于手机来说SD卡)中。
操作系统一般以文件的形式来保存数据,而应用程序更喜欢使用数据库来保存。
在手机中,也有许多需要保存的数据,如音频文件、视频、图片、通讯录、短信、游戏中的设置等数据。
Android作为一种手机上的操作系统,提供了以下几种数据存取方式:Preference(配置)、File(文件)、SQLite(数据库)、网络等。
另外,在Android中,各个应用程序组件之间是相互独立的,彼此的数据一般不能共享,为了实现数据的共享,Android提供Content Provider组件来实现应用程序之间的数据共享(最典型的共享就如通讯录)。
4.1 PreferencePreference提供了一种轻量级的数据存取方法,应用场合主要是数据比较少的配置信息。
它以“键-值”(是一个Map)对的方式将数据保存在一个XML配置文件中。
4.1.1 Preference简介使用Preference方式来存取数据,要用到SharedPreferences接口和SharedPreferences的一个内部接口SharedPreferences.Editor,这两个接口在android.content包中。
调用Context.getSharedPreferences( String name, int mode)方法可得到SharedPreferences接口,该方法的第一个参数是文件名称,第二个参数是操作模式。
操作模式有三种:MODE_PRIV ATE(私有)、MODE_WORLD_READABLE (可读)和MODE_WORLD_WRITEABLE(可写)。
SharedPreferences提供了获得数据的方法,如:getString、getInt等。
简述android中的5种数据存储方式。

简述android中的5种数据存储方式。
在Android中,我们可以使用以下5种数据存储方式:
1. SharedPreferences: SharedPreferences是一种轻量级的数据存储方式,用于存储小量的键值对数据,比如应用程序的配置信息等。
2. SQLite数据库:SQLite是一个轻量级的关系型数据库,它提供了一种简单的方法来存储和检索数据。
3. 文件存储:我们可以将数据存储在Android设备的内部存储或外部存储设备中,比如SD卡等。
4. ContentProvider:ContentProvider是Android中的一个组件,它提供了一种标准的接口来访问应用程序中的数据。
5. Network Data:Android应用程序可以通过网络连接获取和存储数据,比如使用HTTP协议来下载数据,或者使用云存储服务来保存数据。
- 1 -。
android-数据存储之外部file存储(sdcard)

android-数据存储之外部file存储(sdcard)⼀、基础概要 1、说明: 1>应⽤程序运⾏⽤到的数据⽂件可以保存到sd卡中 2>⽂件类型:任意 3>数据保存路径: 路径1:/storage/sdcard/Android/data/packageName/files 其它应⽤可以访问,应⽤卸载时删除 路径2:/storage/sdcard/xxx/ (表⽰⾃⼰创建的⽂件--xxx) 其它应⽤可以访问,应⽤卸载时不会被删除 2、相关API Environment 操作sd卡⼯具类: ---得到sd卡状态:Environment.getExternalStorageState() sd卡可读写的挂载状态值:Environment.MEDIA_MOUNTED ---得到sd卡路径:Environment.getExternalStorageDirectory() context.getExternalFilesDir(): ---得到 /mnt/sdcard/Android/data/package_name/files/xxx.txt 操作sd卡的权限: ---android.permission.WRITE_EXTERNAL_STORAGE 属于写的权限,但加上后也可读。
⼆、开发步骤(路径1)1、写数据 1>判断sd卡状态,如果是挂载的状态继续 2>获取输⼊⽂件名/内容 3>得到指定⽂件的OutputStream: .得到sd卡下的files路径 .组成完整路径 .创建FileOutputStream 4>写数据if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {String fileName="xrk";String fileContent="我不是向⽇葵";String filesPath=getExternalFilesDir(null).getAbsolutePath();String filePath=filesPath+"/"+fileName;FileOutputStream fos=new FileOutputStream(filePath);fos.write(fileContent.getBytes("utf-8"));fos.close();Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();}else{Toast.makeText(MainActivity.this, "保存是啊⽐", Toast.LENGTH_SHORT).show();}2、读数据:if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {String fileName="xrk";String filesPath=getExternalFilesDir(null).getAbsolutePath();System.out.println("iueiudshcs"+filesPath);String filePath=filesPath+"/"+fileName;FileInputStream fis=new FileInputStream(filePath);ByteArrayOutputStream baos=new ByteArrayOutputStream();byte[] buffer=new byte[1024];int len=-1;while((len=fis.read(buffer))!=-1){baos.write(buffer, 0, len);}String content=baos.toString();Toast.makeText(MainActivity.this, "读取成功"+content, Toast.LENGTH_SHORT).show(); }else{Toast.makeText(MainActivity.this, "读取失败", Toast.LENGTH_SHORT).show();}三、开发步骤(路径2) 1、写数据if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {String fileName="谢荣康.txt";String fileContent="我不是向⽇葵";//得到指定⽂件的输出流String sdPath=Environment.getExternalStorageDirectory().getAbsolutePath();File file=new File(sdPath+"/atguigu");if (!file.exists()) {file.mkdirs();//创建⽂件夹}String filePath=sdPath+"/atguigu/"+fileName;String filesPath=getExternalFilesDir(null).getAbsolutePath();System.out.println("iueiudshcs"+filesPath);FileOutputStream fos=new FileOutputStream(filePath);fos.write(fileContent.getBytes("utf-8"));fos.close();Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();}else{Toast.makeText(MainActivity.this, "保存是啊⽐", Toast.LENGTH_SHORT).show();} 2、读数据:if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {String fileName="谢荣康.txt";String sdPath=Environment.getExternalStorageDirectory().getAbsolutePath();String filePath=sdPath+"/atguigu/"+fileName;FileInputStream fis=new FileInputStream(filePath);ByteArrayOutputStream baos=new ByteArrayOutputStream();byte[] buffer=new byte[1024];int len=-1;while((len=fis.read(buffer))!=-1){baos.write(buffer, 0, len);}String content=baos.toString();fis.close();Toast.makeText(MainActivity.this, "读取成功"+content, Toast.LENGTH_SHORT).show(); }else{Toast.makeText(MainActivity.this, "读取失败", Toast.LENGTH_SHORT).show();。
《Android应用开发》课件——第5章 数据存储

File SDPath = Environment.getExternalStorageDirectory();
File file = new File(SDPath, "data.txt");获取SD卡目录
String data = "HelloWorld";
FileOutputStream fos = new FileOutputStream(file);
注意:Android系统有一套自己的安全模型,默认情况下任何应用创 建的文件都是私有的,其他程序无法访问。
✎
5.2.1 将数据存入到文件中
内部存储
String fileName = "data.txt";
// 文件名称
String content = "helloworld";
// 保存数据
FileOutputStream fos = openFileOutput(fileName, MODE_PRIVATE);
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
动态申请权限的方法
外部存储 ✓ 存储位置
将数据以文件的形式存储到外部设备上。
✓ 存储位置
mnt/sdcard/目录下。
✓ 其它应用操作该文件时
不用设置权限,会被其它应用共享
✓ 删除文件
该文件可在本应用外删除,使用前需要 确认外部设备是否可用
✓ 删除文件
直接使用FileOutputStream和 FileInputStream操作对象
移动应用开发中的数据存储与读取技巧

移动应用开发中的数据存储与读取技巧在移动应用开发中,数据的存储与读取是非常常见的需求。
不同的应用场景需要不同的存储方式,例如数据量较小的应用可以使用 SharedPreferences,而数据量较大的应用则需要使用 SQLite 数据库或者 NoSQL 数据库。
本文将介绍在移动应用开发中常用的数据存储与读取技巧。
一、SharedPreferencesSharedPreferences 是 Android 系统中一个轻量级的数据存储方式,它适合用于存储一些简单的配置信息或者少量的用户数据。
SharedPreferences 存储数据的模式类似于键值对,其中键为字符串类型,值可以为布尔型、整型、浮点型、长整型和字符串类型。
SharedPreferences 的写入和读取操作非常简单明了,下面是一个示例代码:// 写入数据SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();editor.putString("name", "Tom");editor.putInt("age", 20);editor.apply();// 读取数据SharedPreferences sharedPreferences =getSharedPreferences("data", MODE_PRIVATE);String name = sharedPreferences.getString("name", "");int age = sharedPreferences.getInt("age", 0);二、SQLite 数据库SQLite 是一种轻量级、可嵌入的关系型数据库,它可以储存在应用程序的内部存储器中,适合储存大量复杂数据。
Android操作系统与应用开发第5章

第5章 Android数据存储
实际上SharedPreferences是采用xml文件格式将数据存储
到设备中的,文件存放在File Explorer中的
/data/data/<package name>/shares_prefs目录下。如果希望
SharedPreferences使用的xml文件能被其他应用读和写,则可 以指定Context.MODE_WORLD_READABLE和 Context.MODE_WORLD_WRITEABLE权限。
第5章 Android数据存储
button.setOnClickListener(new Button.OnClickListener()
{ @Override public void onClick(View v) { //这部分是自动产生方法桩 try {
//写入数据
第5章 Android数据存储
第5章 Android数据存储
一个实现SharedPreferences存储的实例代码如下:
//获取SharedPreferences对象 SharedPreferences user = getSharedPreferences(“user_info”, MODE_PRIVATE); //存入数据 Editor editor = user.edit(); editor.putString(“NAME”, “hello”);
(当然不是真的SD卡,只是镜像文件)。创建SD卡可以在
Eclipse创建模拟器时随同创建,也可以使用DOS命令进行创
建,操作方法如下: 在DOS窗口中进入Android SDK安装路径的tools目录, 输入以下命令创建一张容量为2 GB的SD卡(文件后缀可以随 便取,建议使用.img): mksdcard 2048M D:\AndroidTool\sdcard.img
Android数据存储(Data Storage)

Android提供几种保存持久化应用程序数据的选择。
依赖具体的需求来选择解决适合的方案,如数据应该是应用程序私有的还是共享的,以及数据所需要的存储空间等。
以下是可选择的数据存储方案:共享偏好(Shared Preferences)用键---值对的形式保存私有的原始数据。
内部存储(Internal Storage)在设备的内存上保存私有的数据。
外部存储(External Storage)在共享的外部存储器上保存公共的数据。
SQLite数据库在私有的数据库中保存结构化的数据。
网络连接(Network Connection)把数据保存在自己的互联网服务器上。
Android提供了内容提供器(content provider),能够你的私有数据公开给其他应用程序。
内容提供器是一种公开应用程序数据的读写访问权限的可选组件,这种读写访问会受到你所施加的任何限制的影响。
使用共享偏好SharedPreference类提供了一个一般性的框架,它允许用原始类型数据的键---值对的形式来保存和获取持久化的数据。
使用SharedPreference能够保存任意类型的原始类型数据:布尔型、浮点型、整数型、以及字符串。
这种数据会跨越用户的会话周期被持久化保存(即使是应用程序进程被杀死)。
有两种方法来为应用程序获取SharedPreferences对象:1.getSharedPreferences()方法---如果需要多个用名称来标识的偏好文件,就要使用这个方法,它的第一个参数要指定偏好文件的名称。
2.getPreferences()方法---如果仅需要针对Activity的一个偏好文件,就使用这个方法。
因为这个方法仅返回当前Activity的偏好文件,不需要提供偏好文件的名称。
以下是向偏好文件中写入数据的方法:1.调用edit()方法来获取一个SharedPreferences.Editor对象;2.调用诸如putBoolean()和putString()等方法来添加要保存的值;3.调用commit()方法来提交要保存的新值。
Android数据存储操作

Android数据存储-概述
概述 ∟典型的桌面操作系统提供一种公共文件系统---任何应用软件都 可以使用它来存储和读取文件,该文件也可以被其他的应用软 件所读取(会有一些权限控制设定); ∟Android采用了一种不同的系统,所有的应用软件数据(包括文 件)为该应用软件所私有;而Android同样也提供了一种标准方 式供应用软件将私有数据开放给其他应用软件; ∟在Android中,可供选择的存储方式有SharedPreference、文件 存储、SQLite数据库方式、内容提供器(Content provider)和网 络,本次课将描述一个应用软件存储和获取数据、开放数据给 其他应用软件、从其他应用软件请求数据并且开放他们的多种 方式。
Android数据存储方式
文件存储
∟ SharedPreferences存储方式非常方便,但只适合存储比较简 单的数据,如果需要存储更多的数据,可行的方式有好几种, 下面先介绍文件存储的方法; ∟文件存储方式是一种较常用的方法,在Android中读取/写入文件 的方法,与Java中实现I/O的程序是完全一样的,提供了 openFileI上的文件; Note: 默认情况下,使用openFileOutput方法创建的文件只能被其调 用的应用使用,其他应用无法去读这个文件,如果需要在不同 的应用中共享数据,可以使用ContentProvider实现;
∟query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder):通过Uri进行查询,返回一个 Cursor; ∟insert(Uri uri, ContentValues values):将一组数据插入到Uri指定的 地方; ∟update(Uri uri, ContentValues values, String where, String[] selectionArgs):更新Uri指定位置的数据; ∟delete(Uri uri, String where, String[] selectionArgs):删除指定Uri并 且符合一定条件的数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. sharedPreferences
类似于存储window下的配置文件(.ini),sharedPreferences中存储的信息都是以键值对的形式存储
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="键名">键值</string>
<string name="username">ffppp</string>
</map>
用sharedPreferences存储信息只能是基础数据类型 如:
int/float/string/stringSet/Long/boolean
SharedPreferences生成的存储文件路径:(默认保存名字为当前Activity.xml)
data/data/包名/shared_prefs/Activity.xml
2. 利用SharedPreferred进行数据存储步骤:
向SharedPreferred中写入数据
1)获得SharedPreferences.Editor对象SharedPreferences.Editor editor =
getPreferences(MODE_PRIVATE).edit();
2)利用editor对象的putXX方法向editor中以键值对的形式存储信息(注意:存储基本数据类型数据)
editor.putString("键名", 值);
editor.putString("password",
password.getText().toString());
3)当editor信息存储完成后,提交,此时会在对应文件夹下生产.xml文件(用此种方式生产的xml文件名默认是
Activity.xml)
mit();-生成.xml文件
读取SharedPreferred中数据
1)获得SharedPreferred对象
SharedPreferences sp =
getPreferences(MODE_PRIVATE);
2)通过SharedPreferred的对象的getXX(“键名”,默认值)的方法可以取出存在.xml文件中的对应信息
sp.getString("username", "");
如果想自定义生产的xml文件名,可以
在获得SharedPreferences.Editor对象时利用如下方法:SharedPreferences.Editor editor =
getSharedPreferences("a",MODE_PRIVATE).edit();
此时存储的文件名为a.xml
对应着
在读取SharedPreferred中数据时,获得SharedPreferred对象利用
如下方法(a为存储文件名,0为文件操作模式)
SharedPreferences sp =
getSharedPreferences(“a”,0);
文件的操作模式
• Context.MODE_PRIVATE:默认模式,在那里创建的文
件只能由应用程序调用,即为私有的,值为0。
• Context.MODE_WORLD_READABLE:允许所有其他应用
程序有读取文件的权限,值为1 。
• Context.MODE_WORLD_WRITEABLE:允许所有其他应用
程序具有写入文件的权限,值为2。
Java数据流
输出流向硬盘里写数据 output-------
参照:电脑内存
输入流从硬盘里读出数据 input------
手机内存中写入/读取数据
写入:output….
// context.getFilesDir().getAbsolutePath()获取内存绝对
路径
File file=new
File(context.getFilesDir().getAbsolutePath()+"/"+FileName); //FileOutputStream 是字节流,处理起来麻烦,
openFileoutput方法中参数不能有“/”
FileOutputStream fileoutputstream=new
FileOutputStream(file);
//OutputStreamWriter就是把字节流转换成容易处理的字符流
OutputStreamWriter osw=new
OutputStreamWriter(fileoutputstream);
//写入数据
osw.write(fileContent);
//关闭
osw.close();
读取:input…
//打开一个文件私有输入流,openFileInput方法中不能有“/”FileInputStream
fileinputstream=this.context.openFileInput(FileName);
//把字节流转换成字符流
InputStreamReader isr=new
InputStreamReader(fileinputstream);
BufferedReader br=new BufferedReader(isr);
//可变长StringBuffer存储读出数据的
StringBuffer sb=new StringBuffer();
String data="";
while((data=br.readLine())!=null){
sb.append(data); }
SDCrad上文件存储
要加上权限
获取sd卡上创建删除文件的权限
<uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"获得sdcard上读写数据的权限
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
写入Sd卡
//FileWriter返回字符型数据
FileWriter fw = new FileWriter(file);
fw.write(fileContent);
fw.close();
读取sd卡
File file = new File("/mnt/sdcard/" + FileName);
FileReader fr = new FileReader(file);
StringBuffer sb = new StringBuffer();
BufferedReader br = new
BufferedReader(fr);
String data = "";
while ((data = br.readLine()) != null) {
sb.append(data);
}
return sb.toString();。