`
zhouxiaoli521
  • 浏览: 561621 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 详解SharedPreference 与 FIleInputStream/FileOutputStream将数据存储到SD卡中!

阅读更多

Himi  原创, 欢迎转载,转载请在明显处注明! 谢谢。

原文地址: http://blog.csdn.net/xiaominghimi/archive/2011/01/02/6113019.aspx

     对于游戏中的数据进行保存方式,在Android中常用的有四种保存方式,这里我先给大家统一先简单的介绍下:

1.  SharedPreference

此保存方式试用于简单数据的保存,文如其名属于配置性质的保存,不适合数据比较大的保存方式;

2. 文件存储 (FIleInputStream/FileOutputStream)

此保存方式比较适合游戏的保存和使用,可以保存较大的数据,因为相对于SQLite来说更容易让童鞋们接受,此方式不仅能把数据存储在系统中也能将数据保存到SDcard中;

3.SQLite 

此保存方式比较适合游戏的保存和使用,可以保存较大的数据,并且可以将自己的数据存储到文件系统或者数据库当中,也可以将自己的数据存储到SQLite数据库当中,也能将数据保存到SDcard中;

4.ContentProvider (不推荐用于游戏保存)

此保存方式不推荐用于游戏保存,因为此方式不仅能存储较大数据,还支持多个程序之间就的数据进行交换!!! 但是由于游戏中基本就不可能去访问外部应用的数据,所以对于此方式我不予讲解, 有兴趣的可以去自行百度 google 学习;

以上简单的对几种常用的保存方式进行的概述,那么,下面会详细的去分析每个的优缺点以及每种保存的实现和需要注意的地方!

下面我首先向大家介绍第一种保存方式: 

             保存方式之:  《SharedPreference》


           优点: 简单、方便、适合简单数据的快速保存

           缺点:1.存数的文件只能在同一包内使用,不能在不同包之间使用!

            2.默认将数据存放在系统路径下 /data/data/com.himi/  ,没有找到放SD卡上的方法。

           总结:其实本保存方式如同它的名字一样是个配置保存,虽然方便,但只适合存储比较简单的数据!

 

 

先把xml文件放上来的原因是因为我在此篇中介绍的 SharedPreference 和 文件存储 (FIleInputStream/FileOutputStream),都共用此xml,很简单,两个textview 两个 editview 以及两个button,这里就不多说了;

下面是SharedPreference 的代码实现和详细讲解:

    

 

 

代码中的注释的很清楚了,比较简单,不多说了。


             保存方式之:  《文件存储 OutputStream/InputStream》

           优点: 1.适合游戏存储,能存储较大数据;

                     2.不仅能存储到系统中,也能存储到SD卡中!

           总结:如果童鞋们对SQL不太熟习的话那么选择此种方式最为合适的啦、嘿嘿 

 

 

 

以上代码中实现了两种流形式来完成写入和读入,这里我们为什么要使用Data流来包装,其实不光是获得更多的操作方式,最主要的是方便快捷,你比如用file来读入的时候,明显的复杂了一些不说,它还一次性把所有数据都取出来了,不便于对数据的处理!

强调的有几点:

1: 在一开始对数据的访问再次提醒童鞋们,这个跟sharedPreference的获取方式不一样,sharedPreference 的获取方式可以得到一个默认的值,但是你用咱们获取的是个文件 而且直接就去open这个文件,一旦不存在必定异常,所以这一块的异常处理,以及finally的处理一定要处理得当。

2.其实在一开始用data包装的时候发现写入的字符串在读入的时候发现字符乱码了,查了api才发现,api规定当写入字符串的时候必须写入UTF-8格式的编码,但是后来不知道怎么了就没事了。 - -、所以这里如果童鞋们遇到此问题,我给出大家一个解决方法,就是在写入的时候我们不要去DataOutputStream 来包装而是用,OutputStreamWriter ,因为在构造的可以设定编码!

                                 OutputStreamWriter osw = new OutputStreamWriter(fis,"UTF-8");

 String  content = EncodingUtils.getString(buffer, "UTF-8");  这个也能把字符数组转码制!

这样写入的就肯定是UTF-8编码的字符啦、

下面介绍如何把我们的数据通过 OutputStream/InputStream 存入SD卡中!

   其实将我们的数据放入SD卡中,无疑就需要对代码进行两处的修改:

注意:一定要有SD卡!对于如何创建SD卡在前一篇文章中已经说了两种方式,不会的童鞋可以去看下;

第一:检查是否装有SD卡;  

第二: 修改读入的地方(备注1)

         fis = this.openFileInput("save.himi"); //这里没有路径,路径是默认的 data-data-com.himi-files下 

      替换成我们的SD卡的路径就可以了:

          File path = new File("/sdcard/himi/save.himi");//这里新建一个File目录路径

          fis = new FileInputStream(path);传入路径

第三 : 修改写入的地方(备注2)

        fos = this.openFileOutput("save.himi", MODE_PRIVATE);这里也是默认路径,需要对其修改,

       注意:这里修改了,那么在finally中的判定大家也要对应的适当修改;

注意:如果是系统路径,当没有此文件的时候,android 会默认创建一个!但是我们放入SD卡的时候要自己创建目录路径和文件!


 

 

第四: 因为我们要在SD卡中进行写入的操作,所以要在配置文件中声明权限!

AndroidMainfest.xml 

 

 

 这一句就是啦~

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

为了让大家看到所放的位置,所以把整个xml放出来供参考;

那么当创建路径和文件的时候,我们对其检查SD卡中是否已经存在exists()方法 ,如果已经存在就不去创建,这样避免下次再次写入数据的时候又新建了文件和路径、

其实我们在可以在启动程序的时候判断如果没有此文件,我们可以直接紧接着创建一个文件,这些都属于优化上的了,我主要是让大家引入,学会,那么其他的简化啦,优化啦,其他方式去实现啦都留给各位同学自己了、


 

本篇源码:http://download.csdn.net/source/2959100

 

                         


 

分享到:
评论

相关推荐

    Android数据存储之SharedPreference

    在Android应用开发中,数据存储是一项至关重要的任务,它使得应用程序可以持久化用户数据或应用程序状态。 SharedPreference是Android提供的一种轻量级的数据存储机制,主要用于存储键值对(key-value pairs)的数据...

    android studio文件存储和sharedPreference存储

    在Android开发中,数据存储是应用必不可少的一部分,用于持久化用户数据或应用程序的状态。本教程主要探讨在Android Studio中如何实现文件存储和SharedPreferences存储,以QQ登录为例,讲解如何保存登录的用户名和...

    android SharedPreference实现登录

    在Android应用开发中,数据存储是一项重要的任务,用于保存用户数据、应用状态或者配置信息等。其中,`SharedPreference` 是一种轻量级的数据存储方式,特别适合用来存储一些简单的键值对数据,如登录状态、用户偏好...

    android Sharedpreference的例子代码

    在Android开发中,SharedPreference是一种轻量级的数据存储机制,用于保存和读取小型的键值对数据。它非常适合用来存储应用的用户设置或者一些简单的持久化数据,比如开关状态、首选项等。在这个"android ...

    Android中SharedPreference详解及简单实例

    Android中SharedPreference详解  SharedPreference是Android提供的一种轻量级的数据存储方式,主要用来存储一些简单的配置信息,例如,默认欢迎语,登录用户名和密码等。其以键值对的方式存储,使得我们能很方便进行...

    Android-一个比较安全的SharedPreference加密方案

    在Android应用开发中,SharedPreference通常用于存储轻量级的数据,如用户偏好设置或小量配置信息。然而,由于其明文存储的特性, SharedPreference中的数据可能存在被恶意读取的安全风险。为了解决这个问题,我们...

    Android存储方式实例教程

    操作方式与普通java相似,即打开一个FileInputStream/FileOutPutStream,转成InputStream/outPutStream 然后读/写字节. SharedPrefreence主要用来存储简单数据类型. 不能存文件也不适合,比如QQ第一次登陆后可以保存...

    android+sharedpreference简单小案例自动登录、记住密码

    在Android开发中,SharedPreference是实现轻量级数据存储的一种方式,特别适合用来保存应用的配置信息或用户偏好设置,如自动登录和记住密码的功能。在这个小案例中,我们将探讨如何利用SharedPreference来实现这些...

    android SharedPreference Demo

    在 `android SharedPreference Demo` 中,我们将深入探讨如何使用 SharedPreference 进行数据的读写操作以及在实际项目中的应用。 **1. SharedPreference 的工作原理** SharedPreference 实际上是基于 XML 文件的...

    Android应用开发-SharedPreference存储数据.pptx

    在Android应用开发中,SharedPreference是一种轻量级的数据存储机制,主要用于存储应用的配置参数或者简单的用户设置。它以键值对(key-value pairs)的形式保存数据,并且这些数据是以XML格式存储在设备的文件系统...

    android sharedpreference 简易实现

    在本实践项目"android sharedpreference 简易实现"中,我们将深入探讨如何使用`SharedPreferences`进行数据持久化。 首先,`SharedPreferences`提供了两个主要接口:`SharedPreferences`和`SharedPreferences....

    Android之SharedPreference

    通过以上的介绍,我们可以看出`SharedPreference`在Android开发中的重要性,它为开发者提供了一种简单快捷的方式来存储和检索小规模的数据。在实际项目中,正确地使用`SharedPreference`可以帮助我们实现高效且稳定...

    Android APP之间共享SharedPreference读写

    SharedPreference跨应用读写,适用于自己公司的多个APP,具体见blog: http://blog.csdn.net/hwe_xc/article/details/50788591 注意:两个应用签名必须一样。

    Android中SharedPreference的使用

    写一个SharedPreference的工具类,通过单例模式,让使用者在调用的时候,按照固定的方式调用。包括了String、int、boolean等基本数据类型的保存与获取,还包括了清除SP中一个或全部的数据。

    mooc_android_lesson20_SharedPreference登录功能

    在Android应用开发中,SharedPreference是一种轻量级的数据存储机制,用于存储小量的键值对数据,通常用于实现用户设置或应用配置的持久化。在这个"mooc_android_lesson20_SharedPreference登录功能"的课程中,我们...

    Android中SharedPreference使用实例讲解

    在Android开发中,SharedPreference是一种轻量级的数据存储机制,用于保存应用的简单键值对数据,如用户偏好设置或一些临时状态。在本实例中,我们主要关注如何使用SharedPreference来实现登录界面记住密码的功能。 ...

    Android程序设计-数据存储SharedPreference.pptx

    在Android程序设计中,数据存储是一个关键部分,而`SharedPreferences`是Android系统提供的一种轻量级的数据存储机制,特别适合用于存储少量的配置信息。`SharedPreferences`采用键值对(key-value pairs)的形式,...

    Android游戏保存之SharedPreference使用Demo源码.rar

    SharedPreference是Android系统提供的一个接口,用于存储和读取键值对的数据,这些数据以XML文件的形式存储在设备的沙盒内,通常用于存储应用的设置或者轻量级的持久化数据。下面我们将深入探讨SharedPreference的...

    Android应用源码之(游戏保存之SharedPreference).zip

    本主题将深入探讨如何使用`SharedPreference`在Android游戏中实现数据持久化,特别是关于游戏保存的功能。`SharedPreference`是Android提供的一种轻量级的数据存储机制,适合存储键值对类型的数据,如布尔值、整数、...

Global site tag (gtag.js) - Google Analytics