Android数据存储(数据持久化)

本文介绍了Android平台上的五种主要数据存储方式:SharedPreferences、文件存储、数据库、ContentProvider及网络存储。详细讲解了每种方式的特点及使用方法,包括数据的读取、写入、更新与删除等基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据存储的几种方式: 

1、SharedPreferences共享参数

2、File文件的方式

3、数据库

4、ContentProvide

5、网络存储


存储目录:

SharedPreferences--->/data/data/packageName/shared_prefs

File--->/data/data/packageName/files

数据库--->/data/data/packageName/databases


SharedPreferences的方式存储数据:

SharedPreferences存储数据是以xml文件格式存放数据,使用Map数据结构,以键值对的方式存储

使用方法:

首先要获取SharedPreferences和edit对象:

SharedPreferences sp = getSharedPreferences("my_sp",MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();

getSharePreference();方法有两个参数第一个参数是要存储的文件名,上面说过sharePreference是以xm格式存储文件的,这个参数就是存储之后生成的xml文件的文件名;第二个参数是存储模式,有四个取值分别是:

Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,写入的内容会覆盖源文件的内容

Context.MODE_APPEND:会检查模式是否存在,存在就就往文件追加新内容,否则就创建新文件

Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取

Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他文件写入

操作:SharePreferences存储数据是通过获取Editor编辑器对象来操作的。

插入数据:
调用Editor.putxxxx方法,两个参数分别为键和值。
获取数据:
调用Editor.getxxxx方法,两个参数分别为键和不存在指定键时的默认值。
删除数据:
调用Editor.remove方法,参数为指定的键。
清空所有数据:

调用Editor.clear方法

上述所有方法调用都要执行Editor.commit()或者Edit.apply()方法来提交。

apply()和commit的区别:apply是将修改数据原子提交到内存,而后异步真正提交到硬件磁盘;而commit是同步的提交到硬件磁盘,因此,在多个并发的提交commit的时候,他们会等待正在处理的commit保存到磁盘后在操作,从而降低了效率。而apply只是原子的提交到内容,后面有调用apply的函数的将会直接覆盖前面的内存数据,这样从一定程度上提高了很多效率;apply方法不会提示任何失败的提示。

File文件的方式:

通过file文件方式将数据存储到手机上,分为两种方式:内置存储(存储到运行内存中)和外置存储(存储到SD卡中)

当文件被保存在内部存储中时,默认情况下,文件是应用程序私有的,其他应用不能访问。当用户卸载应用程序时这些文件也跟着被删除。

* 在Android的api中已经提供了两个访问内置文件目录(/data/data/packageNama/files)的方法
 * openFileInput 获取files文件夹下文件的输入流
 * openFileOutput 获取files文件夹下文件的输出流

向内置存储中写文件:

try {
			FileOutputStream fos = openFileOutput("my_text", Context.MODE_PRIVATE);
			String content = "文件存储方式练习";
			fos.write(content.getBytes());
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

调用openFileOutput()方法返回文件输出流FileOutputStream,调用FileOutputStream.write()将文件以byte字节的形式写入内存中,最后调用close()函数关闭流。

在 openFileOutput(String name, int mode)方法中

  • name参数: 用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。

  • mode参数:用于指定操作模式,分为四种:MODE_PRIVATE、MODE_APPEND、MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE,等同于SharePreferences的四种数据存储模式。

从内置存储中读取文件:

try {
			FileInputStream fis = openFileInput("my_text");
			byte[] buffer = new byte[fis.available()];
			fis.read(buffer);
			String content = new String(buffer);
			fis.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

调用openFileInput()方法返回文件输出流FileInputStream,调用FileInputStream.read()将读取到的字节数据放到字节数组当中,最后调用close()函数关闭流。

在 openFileInput(String name)方法中

  • name参数: 用于指定文件名称,不能包含路径分隔符“/” 

外置存储读写文件:

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){  
            File sdCardDir = Environment.getExternalStorageDirectory();//获取SDCard目录  "/sdcard"        

               File saveFile = new File(sdCardDir,"a.txt"); 

               //写数据
                try {
                    FileOutputStream fos= new FileOutputStream(saveFile); 
                    fos.write("fanrunqi".getBytes()); 
                    fos.close();
                } catch (Exception e) {
                    e.printStackTrace();
                } 

                //读数据
                 try {
                    FileInputStream fis= new FileInputStream(saveFile); 
                    int len =0;
                    byte[] buf = new byte[1024];
                    StringBuffer sb = new StringBuffer();
                    while((len=fis.read(buf))!=-1){
                        sb.append(new String(buf, 0, len));
                    }
                    fis.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }  
        }

3、数据库存储

数据库存储方式请看

4、ContentProvide

ContentProvide

5、网络存储

网络存储就是将数据通过网络请求保存到后台服务器中的存储方式,一般的网络请求方式有httpUrlConnection和httpClient

手机内置存储的九大公有目录:

DCM存储照片

Download默认下载路径

Music

Movices

Pictures

Notification

Ringtones铃声

Environment.java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值