实验五指导:数据存储(一).doc_第1页
实验五指导:数据存储(一).doc_第2页
实验五指导:数据存储(一).doc_第3页
实验五指导:数据存储(一).doc_第4页
实验五指导:数据存储(一).doc_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验五 数据存储(一)实验目的:学习简单的数据存储方法。涉及知识点:SharedPreferences、内存存储、外部存储实验内容:实验指导:一、SharedPreferences1、 SharedPreferences 简介q SharedPreferences是一种轻量级的永久性的数据保存方式 q 通过SharedPreferences开发人员可以将NVP(Name/Value Pair,名称/值对)保存在Android内部存储器的文件系统中,而不需关心文件系统的操作过程 q 开发人员仅通过调用SharedPreferences中的函数就可以实现对NVP的保存和读取 q 一般用于:保存应用程序的配置信息和个性化内容。q 也可用于:不同应用程序间的数据共享。2、 SharedPreferences支持三种访问模式 n 私有(MODE_PRIVATE):仅创建SharedPreferences的程序有权限对其进行读取或写入 n 全局读(MODE_WORLD_READABLE):不仅创建程序可以对其进行读取或写入,其它应用程序也具有读取操作的权限,但没有写入操作的权限 n 全局写(MODE_WORLD_WRITEABLE):所有程序都可以对其进行写入操作,但没有读取操作的权限 3、 使用过程1)定义常量/*定义访问模式*/public static int MODE = MODE_PRIVATE; /*定义一个SharedPreferences名。之后将以这个名字保存在Android文件系统中*/public static final String PREFERENCE_NAME = SaveSetting;2)往SharedPreferences中写数据 /*获取SharedPreferences实例 */SharedPreferences sharedPreferences = getSharedPreferences(PREFERENCE_NAME, MODE); /*通过SharedPreferences.Editor类向SharedPreferences中写键值,调用commit()保存修改内容*/ SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString(Name, Tom); editor.putInt(Age, 20); editor.putFloat(Height, 1.81f);mit(); 3)从SharedPreferences中读数据 /*获取SharedPreferences实例。如果不存在将新建一个 */SharedPreferences sharedPreferences = getSharedPreferences(PREFERENCE_NAME, MODE); /*读取SharedPreferences中保存的键值:如果文件或键值不在,则用缺省值 */ String name = sharedPreferences.getString(Name,Default Name); int age = sharedPreferences.getInt(Age, 20); float height = sharedPreferences.getFloat(Height,1.81f); 4、 查看SharedPreferences文件eclipse 的window-show view- other-android-file explorer (可以查看模拟器上的文件)SharedPreferences产生的文件就保存在/data/data/shared_prefs目录下 选中文件,点击右上角:pull a file from a device可另存该文件。5、 应用举例利用SharedPreferences在登陆界面保存用户名和密码。当下次登录时就不用再输入。 二、内部存储:直接使用文件保存数据1、简介Android系统允许应用程序创建仅能够自身访问的私有文件,文件保存在设备的内部存储器上,即Android系统下的/data/data/files目录中 可通过文件访问权限的控制保证文件的私密性n 四种文件操作模式模式 说明 MODE_PRIVATE 私有模式,文件仅能被创建文件的程序访问,或具有相同UID的程序访问。 MODE_APPEND 追加模式,如果文件已经存在,则在文件的结尾处添加新数据。 MODE_WORLD_READABLE 全局读模式,允许任何程序读取私有文件。 MODE_WORLD_WRITEABLE 全局写模式,允许任何程序写入私有文件。 因为流文件操作可能会遇到各种问题而最终导致操作失败,在实际操作过程中会遇到错误提示,因此代码应该使用try/catch捕获可能产生的异常2、文件输出基本过程:将字符串写入文件,文件作为输出FileOutputStream fos = null; try fos = openFileOutput(fileName,Context.MODE_PRIVATE); fos.write(text.getBytes(); /String类型变量text:保存了需要写入文件的内容 catch (FileNotFoundException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); finally if (fos != null)try fos.flush(); fos.close(); catch (IOException e) e.printStackTrace(); 说明:1)行3中fileName不可以包含描述路径的斜杠 2)调用close()之前务必调用flush()将缓冲中的所有数据写入文件3)openFileOutput打开应用的私有文件,如果文件不存在则创建。4)FileOutputStream是写到文件的字节流3、文件输入基本过程:读取文件内容到字符串,文件作为输入FileInputStream fis = null; try fis = openFileInput(fileName); if (fis.available() = 0) return; byte readBytes = new bytefis.available(); while(fis.read(readBytes) != -1); String text = new String(readBytes); /String类型变量text:保存从文件中读取的内容 catch (FileNotFoundException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); finally if (fis != null)try fis.close(); catch (IOException e) e.printStackTrace(); 说明:1) FileInputStream 的方法available() 返回估计可读的字节数.2) public int read (byte buffer, int byteOffset, int byteCount) 最多从字节流中读byteCount个字节,并存储在字节数组缓冲buffer中,存放时放在byteOffset指定的在buffer的位置。返回实际读的字节数,或者如果读到流的末尾了就返回-1.运行程序后,在文件浏览器中可查看:导出输出的流文件,可查看内容。另外,注意只有当应用在模拟器上运行起来后,才能使用File Explore看到保存的文件。三、外部存储1、外部存储应用场合q Micro SD卡适用于保存大尺寸的文件或者是一些无需设置访问权限的文件q 如果用户希望保存录制的视频文件和音频文件,因为Android设备的内部存储空间有限,所以使用Micro SD卡则是非常适合的选择 q 但如果需要设置文件的访问权限,则不能够使用Micro SD卡,因为Micro SD卡使用FAT(File Allocation Table)文件系统,不支持访问模式和权限控制 2、使用外部存储的前提条件q 正确加载SD卡后,SD卡中的目录和文件被映射到/mnt/sdcard目录下q 因为用户可以加载或卸载SD卡,所以在编程访问SD卡前首先需要检测/mnt/sdcard目录是否可用q 如果不可用,说明设备中的SD卡已经被卸载。如果可用,则直接通过使用标准的java.io.File类进行访问3、编码时与内部存储的区别q 与内部存储的核心代码比较相似,不同之处在于代码中添加了/mnt/sdcard目录存在性检查,并使用“绝对目录+文件名”的形式表示新建立的文件,并在写入文件前对文件的存在性和可写入性进行检查4、应用举例1)参考代码方法一:Environment.getExternalStorageDirectory()当前值为/storage/sdcard(模拟器上运行)(当在我的手机上运行时值为/storage/emulated/0),/mnt/sdcard实际上就指向该目录。2)查看输出文件方法二:说明1、newFile=new File(dir.getAbsolutePath()+/+filen)并不是在盘上创建一个文件,而只是在内存中创建一个文件对象,参数是该文件对象对应的目录; newFile.createNewFile()才是在盘上创建一个文件。2、if(dir.exists()& dir.canWrite()/检查SD卡的存在性 检查/mnt/sdcard目录是否可用,实际上是检查SD卡是否是已加载状态,若已加载,/mnt/sdcard实际指向/storage/sdcard3、因为SD卡中的目录和文件是被映射到/mnt/sdcard目录下的。4、程序运行时,若发生“SD 卡不存在或不可写”的错误,1)检查是否在manifest.xml文件中增加使用许可;2)检查模拟器中对SD卡的设置是否正确,比如,需要设置SD卡的存储容量。四、其它1、获取应用程序运行的当前工作目录,可调用方法getApplicationContext().getFi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论