实验五指导:数据存储(一)剖析_第1页
实验五指导:数据存储(一)剖析_第2页
实验五指导:数据存储(一)剖析_第3页
实验五指导:数据存储(一)剖析_第4页
实验五指导:数据存储(一)剖析_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、实验五数据存储(一)实验目的:学习简单的数据存储方法。涉及知识点:SharedPreferences、内存存储、外部存储实验内容:实验指导:一、SharedPreferences1、SharedPreferences 简介SharedPreferences是一种轻量级的永久性的数据保存方式通过SharedPrefere nces 开发人员可以将 NVP ( Name/Value Pair,名称/值对)保存在 An droid内部存储器的文件系统中,而不需关心文件系统的操作过程开发人员仅通过调用 SharedPreferences中的函数就可以实现对NVP的保存和读取一般用于:保存应用程序的配置

2、信息和个性化内容。也可用于:不同应用程序间 的数据共享。2、SharedPreferences 支持三种访问模式私有(MODE_PRIVATE ):仅创建SharedPreferences的程序有权限对其进行读取或写入全局读(MODE_WORLD_READABLE ):不仅创建程序可以对其进行读取或写入,其它应用程序也具有读取操作的权限,但没有写入操作的权限全局写(MODE_WORLD_WRITEABLE ):所有程序都可以对其进行写入操作,但没有读取操作的权限3、使用过程1 )定义常量/*定义访问模式*/public static int MODE = MODE_PRIVATE;/*定义一个

3、SharedPrefere nces名。之后将以这个名字保存在An droid文件系统中*/public static final Stri ng PREFERENCE_NAME = SaveSetti ng;2) 往 SharedPreferences 中写数据/* 获取 SharedPreferences 实例 */SharedPrefere nces sharedPrefere nces = getSharedPrefere nces(PREFERENCE_NAME, MODE);/* 通过 SharedPreferences.Editor 类向 SharedPreferences 中写

4、键值,调用 commit()保存修改内容 */SharedPrefere nces.Editor editor = sharedPrefere nces.edit();editor.putStri ng(Name, Tom);editor.put In t(Age, 20);editor.putFloat(Height, 1.81f);mit();3) 从 SharedPreferences 中读数据/*获取SharedPreferences 实例。如果不存在将新建一个*/SharedPrefere nces sharedPrefere nces = getSharedPrefere nces

5、(PREFERENCE_NAME, MODE);/*读取SharedPreferences中保存的键值:如果文件或键值不在,则用缺省值*/Stri ng n ame = sharedPrefere nces.getStri ng(Name,Default Name);int age = sharedPrefere nces.getl nt(Age, 20);float height = sharedPrefere nces.getFloat(Height,1.81f);4、查看 SharedPreferences 文件可以查看模拟器上的文件)eclipse 的 window-show view

6、-other-android-file explorer (目录下SharedPrefere nces产生的文件就保存在 /data/data/shared_prefs选中文件,点击右上角:pull a file from a device可另存该文件。5、应用举例利用SharedPreferences在登陆界面保存用户名和密码。当下次登录时就不用再输入。我要注册用户名靈码(yangF1取消J -yangycy二、内部存储:直接使用文件保存数据1、简介An droid系统允许应用程序创建仅能够自身访问的私有文件,文件保存在设备的内部存储器上,即An droid系统下的 /data/data/f

7、iles目录中可通过文件访问权限的控制保证文件的私密性四种文件操作模式模式说明MODE_PRIVATE私有模式,文件仅能被创建文件的程序访问,或具有相冋UID的程序访问。MODE_APPEND追加模式,如果文件已经存在,则在文件的结尾处添加新数据。MODE_WORLD_READABLE全局读模式,允许任何程序读取私有文件。MODE_WORLD_WRITEABLE全局写模式,允许任何程序写入私有文件。因为流文件操作可能会遇到各种问题而最终导致操作失败,在实际操作过程中会遇到错误提示,因此代码应该 使用try/catch捕获可能产生的异常2、文件输出基本过程:将字符串写入文件,文件作为输出File

8、OutputStream fos = n ull;try fos =ope nF ileOutput (fileName,C on text.MODE_PRIVATE);fos. write (text.getBytes(); /String 类型变量text :保存了需要写入文件的内容catch (FileNotF oun dExcepti on e) e.pri ntStackTrace();catch (lOExcepti on e) e.pri ntStackTrace();fin allyif (fos != n ull)try fos. flush ();fos. close ()

9、;catch (IOExcepti on e) e.pri ntStackTrace();说明:1 )行3中fileName不可以包含描述路径的斜杠2) 调用close ()之前务必调用flush()将缓冲中的所有数据写入文件3) openFileOutput打开应用的私有文件,如果文件不存在则创建。4) FileOutputStream 是写到文件的字节流3、文件输入基本过程:读取文件内容到字符串,文件作为输入File In putStream fis = nu II;try fis =ope nF ile In put (fileName);if (fis. available () =

10、0)return;byte readBytes = new bytefis.available();while(fis. read (readBytes) != -1);String text = new String(readBytes);/String 类型变量text :保存从文件中读取的内容catch (FileNotF oun dExcepti on e) e.pri ntStackTrace();catch (IOExcepti on e) e.pri ntStackTrace();fin allyif (fis != n ull)try fis. close (); catch

11、(IOExcepti on e) e.pri ntStackTrace();说明:1) FileInputStream的方法available ()返回估计可读的字节数.2) public int read (byte buffer, int byteOffset, int byteCount)最多从字节流中读byteCount个字节,并存储在字节数组缓冲buffer中,存放时放在 byteOffset指定的在buffer的位置。返回实际读的字节数,或者如果读到流的末尾了就返回-1.运行程序后,在文件浏览器中可查看:鼻 & corrtHmyexample-test2015-11*2619:37

12、drwxpxx,已 cache2015-09-2911:02dnwxrwMx“已 files2015-11-2603:55drwxrwxx;saved File1052015-11-2606:16-rw-rw& lib2015 U 2619;37llrwxrvrwxj D shared_prefs2015-11-2523:00drwxrwxF|Jj SaveSetting.xml1472015-11-2523:00-rwrw-导出输出的流文件,可查看内容。另外,注意只有当应用在模拟器上运行起来后,才能使用File Explore看到保存的文件。三、外部存储1、外部存储应用场合Micro SD卡

13、适用于保存大尺寸的文件或者是一些无需设置访问权限的文件如果用户希望保存录制的视频文件和音频文件,因为An droid 设备的内部存储空间有限,所以使用Micro SD 卡则是非常适合的选择但如果需要设置文件的访问权限,则不能够使用 Micro SD 卡,因为Micro SD 卡使用FAT(FileAllocation Table)文件系统,不支持访问模式和权限控制2、使用外部存储的前提条件正确加载SD卡后,SD卡中的目录和文件被映射到/mnt/sdcard目录下因为用户可以加载或卸载 SD卡,所以在编程访问SD卡前首先需要检测/mnt/sdcard目录是否可用如果不可用,说明设备中的SD卡已经

14、被卸载。如果可用,则直接通过使用标准的java.io.File类进行访问3、编码时与内部存储的区别与内部存储的核心代码比较相似,不同之处在于代码中添加了/mn t/sdcard目录存在性检查,并使用绝对目录+文件名”的形式表示新建立的文件,并在写入文件前对文件的存在性和可写入性进行 检查4、应用举例1 )参考代码 方法一:if (Environ me) .equals (Environment .MEDIANOUffTED)= :-SDCardZ-E 土疸有:s.=iLe = new FilefEnv ir onment. je tFxternn LStorageDi rectory (Jj+

15、ilen);-. - -neile:二工SDv芳 m 云FileOutputStreim fosd 工 null;try newFile.createMewF/ /庄!5D召二*蛋工-newFileif(newFileeocit() &.&. newFilecanWrite(), U于文二匸建是苣号fosd=new FileOutputStream(newFile);/newFile才h3亡曩fosdwrite (co ntgetBytes () j,芒h写押孚号之耳寻一字*尹号.Toast 咤有起filen+X -? KSD-*?1 j Toast LEffGTH SHOUF) show()

16、 if (!化朋订e.existsO)ToastL/wcrfeeIext(thisf 文-全三Toast.fMGTjH_5MflffT) .shaw() ,else if(InewFile.canWrite()Teast.mate7ejft(this,文宀不电早入, Toast.LENGTH 5H0RT) .show() j return false; catch ( F ileltotFoundE xception e) e-printSta clcTia 匚皂();catch (IOExceptiam e) e fcprintStackTrace();finallyif (fosd !=

17、nulltry fcisd,flush(); fosd-closeO;catch (IOException e) e.printSteckTrace);Environment. getExternalStorageDirectory()当前值为 /storage/sdcard(模拟器上运行)(当在我的手机上运行时值为/storage/emulated/0) , /mnt/sdcard实际上就指向该目录。I Login Manifest 爲II cuses-perTissioin android :name= android.pGnnissiOFiiOUN匸则JOLW匸FJXrSKSrEHS/1

18、2U5es-per13 0 obb2015-12-012 036 drwxr-xr-x已 dcard2015-12-0120:38 Irwxrwxrwx- /storage/sdeard: 已 secure2015-12-0120:36 drwx B shell2015-12-0120:36 drwx-J i storage2016-10-19J L- sdcard2016-1049Alarms2016*07-20、N Android2016-09-19 B DCIM2016-07-20P S Download2016-07-20tLOST.DIR2016-07-21 匚 Movies2016

19、-07-20 L,Music2016-07-20【,3 Notifications2016*07-20t? E Pictures2016-07-20卜 z Podcasts2016-07-20Lz Ringtones2016-07-20手 nnyfile22 2016-10-19方法二:File dir=new File(/mnt/sdcard;if (dir printStackTrace();.catch (IOException e) e.printStackTracef);Finallyif (fosd != null)try fosdflush(); fosd+clo5e();catch (iQExcep七ion e) e.printStackTrace();说明1、newFile =new File( dir .getAbsolutePath()+ / +filen )并不是在盘上创建一个文件,而只是在内存中创建一个文件对象,参数是该文件对象对应的目录;n ewFile .createNewFile()才是在盘上创建一个文件。2、 if (dir .exists()&dir .canWrite(

温馨提示

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

评论

0/150

提交评论