sharedpreference和文件存储

Android数据存储

· 内部存储空间十分有限,因而显得可贵,另外,它也是系统本身和系统应用程序主要的数据存储所在地,一旦内部存储空间耗尽,手机也就无法使用了。 

· 所以对于内部存储空间,我们要尽量避免使用。Shared Preferences和SQLite数据库都是存储在内部存储空间上的。内部存储一般用Context来获取和操作。 

一、SharedPreferences

(一)、概念:

    SharedPreferencesAndroid系统提供的一个通用的数据持久化框架,用于存储和读取key-value类型的原始基本数据类型对,目前支持stringintlongfloatboolean基本类型的存储,对于自定义的对象数据类型,无法使用SharedPreferences来存储。

        SharedPreferences主要用于存储系统的配置信息。例如上次登录的用户名,上次最后设置的配置信息(如:是否打开音效、是否使用振动,小游戏的玩家积分等)。当再次启动程序后依然保持原有设置。SharedPreferences用键值对方式存储,方便写入和读取。

 

(二)、使用SharedPreferences的步骤

1、获取SharedPreferences对象;

        SharedPreferences本身是一个接口,无法直接创建实例,通过ContextgetSharedPreferences(String name, int  mode)方法来获取实例。

        该方法的第二个参数有以下三个值:【文件读写的操作模式

· Context.MODE_PRIVATE:  指定该SharedPreferences的数据只能被本应用程序读、写;

· Context.MODE_APPEND:新内容追加到原内容后;

· Context.MODE_WORLD_READABLE:  指定 SharedPreferences数据能被其他应用程序读,但是不支持写;

· Context.MODE_WORLD_WRITEABLE:  指定 SharedPreferences数据能被其他应用程序读、写。会覆盖原数据。 

· 可以使用  +  连接这些权限

2、调用edit()方法获取SharedPreferences.Editor;

3、通过SharedPreferences.Editor接口提供的put()方法对SharedPreferences进行更新;

4、调用SharedPreferences.Editorcommit()方法,将更新提交到SharedPreferences中。

 

(三)、核心代码:

button_main_savedata.setOnClickListener(new View.OnClickListener() {

                        @Override

                        public void onClick(View v) {

                                prefs = getSharedPreferences("myaccount", Context.MODE_PRIVATE);

                                SharedPreferences.Editor editor = prefs.edit();

                                editor.putInt("age", 38);

                                editor.putString("username", "wangxiangjun");

                                editor.putString("pwd", "123456");

                                editor.putString("username", "xiangjun");

                                editor.putString("age", "I'm 40 years old!");

                                editor.commit();

                        }

                });

 

                button_main_readdata.setOnClickListener(new View.OnClickListener() {

                        @Override

                        public void onClick(View v) {

                                prefs = getSharedPreferences("myaccount", Context.MODE_PRIVATE);

                                String name = prefs.getString("username", "wxj");

                                String pwd = prefs.getString("pwd", "000");

                                int age = prefs.getInt("age", 20);

                                System.out.println("====>" + name + ":" + pwd + ":" + age);

                        }

                });

 

 

(四)、保存之后的SharedPreferences数据文件:

        SharedPreferences数据总是以xml格式保存在:/data/data/包名/shared_prefs目录下;

例如:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>

<map>

    <string name="pwd">123456</string>

    <string name="username">xiangjun</string>

    <int  name="age">20</int>

</map>

二、文件存储

内部存储 一般都是私有模式 ,程序卸载就没有了,别的程序不能访问这个文件夹

1.文件保存在哪里

事实上,文件保存的路径与SharedPreferences的保存路径差不多,位于/data/data/<package name>/files下。

2.文件操作的一些方法

知道文件保存的位置和形式后,接下来需要知道操作文件的一些重要的方法,如表所示:

 

操作文件的重要方法

含义

openFileInput()

打开应用程序文件以便读取

openFileOutput()

创建应用程序文件以便写入

deleteFile()

通过名称删除文件

fileList()

获得所有位于/data/data/<package name>/files下的文件列表

getFileDir()

获得/data/data/<package name>/files子目录对象

getCacheDir()

获得/data/data/<package name>/cache子目录对象

getDir()

根据名称创建或获取一个子目录

 

在程序默认位置创建和写入文件

我们知道在Java中通过使用流来读写文件,要创建一个文件首先要建立一个输出流。在Android中同样如此,我们依靠openFileOutput()来获得一个输出流。它将在上一节中展示的位置创建一个文件,使用一个流要3个步骤:

1.获得一个输出流对象

获得一个输出流对象以进行文件操作,使用openFileOutput()方法可以很方便的获得,如下所示:openFileOutput(myFile.txt,Context.MODE_PRIVATE);

2.向流中写入数据

获得了输出流之后我们需要向流中添加我们需要添加的信息了,同样非常方便,使用write()方法就可以了:

write(data.getBytes());

3.关闭流

当数据写入完毕后,使用close()方法可以关闭输出流,方法如下所示:

fos.close();

 

在默认位置读取文件

与上面类似,Android提供了读取文件的简便方法,同样需要3个步骤:

1. 创建输入流

首先,得到了一个输入字节流,参数是文件名。

fis = openFileInput(myFile.txt);

接着,将其转换为字符流,这样可以一个字符一个字符地读取以便显示中文。

isr = new InputStreamReader(fis);

br  = new BufferedReader(isr);

最后,我们又将其包装为缓冲流,这样可以一段一段地读取,减少读写的次数,保护硬盘。

2.  读取数据

从流中获得数据同样非常方便,这里没有使用read()方法而使用了readLine()方法,原因下文也会给出,代码如下:

String s = null;

S = (br.readLine());

3.  关闭输入流

这里记得每个流都要关闭哦:

fis.close();

isr.close();

br.close();

 

发布了14 篇原创文章 · 获赞 1 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览