Android中数据持久化保存的几种方式
- Shared Preferences
- Android中轻量级保存数据的一种方式,可以用于保存程序的配置信息!还有程序第一次进入!
- 一种轻量级的数据保存方式!它会把你要保存的数据,保存到本地,手机的内置存储中!会以一种XML格式的文本存储!
- 使用方法
- 写入:
- 获取SharedPreferences对象
//Context.getSharedPreferences(name, mode)
//name 保存数据xml文件的名字
//mode 模式 MODE_APPEND可追加
//MODE_PRIVATE私有 本程序可以访问
//MODE_WORLD_READABLE 全世界可度
//MODE_WORLD_WRITEABLE 全世界可写
//模式可以用|拼接
//但是注意:配置文件,强烈建议,要写成私有模式
Context.getSharedPreferences(name, mode)
- 创建画笔
Editor edit = sharedPreferences.edit();
- 放数据
edit.put类型(key,value);
- 提交数据
edit.commit();
- 获取SharedPreferences对象
- 读取:
- 获取SharedPreferences对象
Context.getSharedPreferences(name, mode)
- 直接根据类型获取数据
sharedPreferences.get<数据类型>(key,如果key不存在的默认值);
- 获取SharedPreferences对象
- 写入:
- 数据存储的位置:data/data/包名/share_prefs/,只有在程序运行后才会生成文件
- 注意:如果程序卸载!那么此文件也会跟着被删除!
- Internal Storage
- 手机内置存储!
- External Storage
- 手机的外置存储!通常指SDCard!也可以时U盘!
- SQLite Databases
- 数据库,可以保存大量的文本内容!
- NetworkConnection
- 云存储!把数据提交到服务器!
数据读取与写入
Internal Storage(内置存储)
- 介绍:
- 内置存储应该总是可用!
- 内置存储的路径在data/data下,对应的程序会在对应程序的包名下!
- 运行过的程序,都会自动的在内置存储中创建一个包名相同的文件夹
- 如果没有root,没法看data/data下的文件!
- 内置存储中data/data包名文件,只能本程序打开!
- 如果要求文件的安全性比较高,可以优先放置到内置存储中!但是要注意:内置存储大小一般很有限!较大的文件建议放到外置存储中!
- 内置存储程序对应的包,会随着程序卸载而被卸载!
- 读、写、删除
- 内部存储的写入:
- 方式一:
FileOutputStream out=openFileOutput(String name,int mode);
- 方式二:
File file=new File(getFilesDir(), 文件名称);
FileOutputStream out=new FileOutputStream(file);
- 方式一:
- 内部存储的读取:
- 方式一:
FileInputStream in=openFileInput(String name);
- 方式二:
File file=new File(getFilesDir(),文件名称);
FileInputStream in=new FileInputStream(file);
- 方式一:
- 删除文件:
boolean b = deleteFile();
- 内部存储的写入:
外置存储
- 介绍
- 外置存储不一定随时可用!(例如:卸载掉SDCard)
- 使用前先判断SDCard是否可用!
- 外置存储的空间大于内置!可以放置较大的文件!
- 外置存储,任何程序都可以访问!类似数据库这种文件,不建议放置到外置存储中!
- 外置存储使用要加权限!
<!-- 创建文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 读写权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- 获取路径
- 外置存储的位置和路径!
- /mnt/0
- /mnt/scard
- /mnt/media_rw/sdcard
- 获取SDCard所在的根目录
Environment.getExternalStorageDirectory();
- 获取SDCard公有目录
Environment.getExternalStoragePublicDirectory(Environment.类型);
- 获取外置私有目录
Context.getExternalFilesDir(type);
- 获取sdcard挂载状态
Enviroment.getExternalStorageState();
Enviroment.MEDIA_MOUNTED
表示可以使用状态
- 外置存储的位置和路径!
- 写入
- 使用Java的I/O流操作即可
- 写到sdcard
创建目标文件
File file = new File(dir,name);
dir: 文件所在的文件夹 可以根据需求去获取 有三种
name:具体的文件名
FileOutputStream out = new FileOutputStream(File-->目标文件);
out.write(byte[]); //写入内容即可
- 写到Application
File file = new File(dir,name);
dir: 文件所在的文件夹 可以根据需求去获取 有三种
name:具体的文件名称
FileInputStream in = new FileInputStream(File-->要把哪个文件写入);
in转到 byte[]中即可!!!
- Bitmap的compress()方法
- 压缩图片并且保存
Bitmap.compress(参数1,参数2,参数3);
参数1:导出以后的格式,可以使用Bitmap.CompressFormat中的枚举,如Bitmap.CompressFormat.JPEG或Bitmap.CompressFormat.PNG
参数2:压缩指数,100代表满,50原来的二分之一,注意无损格式无法进行压缩,如果强行进行压缩会忽略压缩指数,原图片不会产生变化,如:png格式
参数3:输出流,指要把对应的Bitmap对象压缩后写进哪个流里