android 文件存储&SharedPreferences
一、文件存储
文件存储主要是I/O流的操作,没什么好说的,需要注意的是保存文件的各个目录。
下面为常用的目录:
public static File getInFileDir(Context context) {
return context.getFilesDir(); // /data/data/packagename/files
} public static File getInCacheDir(Context context) {
return context.getCacheDir();// /data/data/packagename/cache
} public static File getExRootDir() {
return Environment.getExternalStorageDirectory();// /storage/sdcard0
} public static File getExPrivateDir(Context context, String type) {
return context.getExternalFilesDir(type); // /storage/sdcard0/Android/data/packagename/files/{type}
} public static File getExPublicDir(String type) {
return Environment.getExternalStoragePublicDirectory(type); // /storage/sdcard0/{type}
} public static File getExCacheDir(Context context) {
return context.getExternalCacheDir(); ///storage/sdcard0/Android/data/packagename/cache
}
其中,除了getExRootDir()和getExPublicDir()两个目录,其余的目录中的数据都会随app的卸载而删除。
File getFilesDir() // /data/data/(packagename)/files FileOutputStream openFileOutput(String name, int mode) boolean deleteFile(String name) String[] fileList()
上面的几个方法都是对目录/data/data/(packagename)/files的操作。
二、SharedPreferences
SharedPreferences适用于保存轻量级的数据,如配置文件。
SharedPreferences文件保存在/data/data/(packagename)/shared_prefs目录下,为xml格式的文件。
获取SharedPreferences:
SharedPreferences getPreferences(int mode) //m1 SharedPreferences getSharedPreferences(String name, int mode) //m2
可以通过上面两个方法获取SharePreferences,m1的文件名为调用此方法的类名,m2自己设置文件名。
保存数据:
SharedPreferences sp = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString("name", "mao");
editor.apply();
获取数据:
String name = sp.getString("name", "");
下面是一个简单的工具类:
public class SPUtils { @SuppressWarnings("unchecked")
public static void put(Context context, String filename, String key, Object obj) {
SharedPreferences sp = context.getSharedPreferences(filename, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
if (obj instanceof Boolean) {
editor.putBoolean(key, (Boolean) obj);
} else if (obj instanceof Float) {
editor.putFloat(key, (Float) obj);
} else if (obj instanceof Integer) {
editor.putInt(key, (Integer) obj);
} else if (obj instanceof Long) {
editor.putLong(key, (Long) obj);
} else if (obj instanceof String) {
editor.putString(key, (String) obj);
} else if (obj instanceof Set) {
editor.putStringSet(key, (Set<String>) obj);
}
editor.apply(); } @SuppressWarnings("unchecked")
public static Object get(Context context, String filename, String key, Object defaultObj) {
SharedPreferences sp = context.getSharedPreferences(filename, Context.MODE_PRIVATE);
if (defaultObj instanceof Boolean) {
return sp.getBoolean(key, (Boolean) defaultObj);
} else if (defaultObj instanceof Float) {
return sp.getFloat(key, (Float) defaultObj);
} else if (defaultObj instanceof Integer) {
return sp.getInt(key, (Integer) defaultObj);
} else if (defaultObj instanceof Long) {
return sp.getLong(key, (Long) defaultObj);
} else if (defaultObj instanceof String) {
return sp.getString(key, (String) defaultObj);
}else if(defaultObj instanceof Set){
return sp.getStringSet(key, (Set<String>) defaultObj);
}
return null;
} public static void remove(Context context, String filename, String key) {
SharedPreferences sp = context.getSharedPreferences(filename, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.remove(key);
editor.apply();
} public static Map<String, ?> getAll(Context context, String filename) {
SharedPreferences sp = context.getSharedPreferences(filename, Context.MODE_PRIVATE);
Map<String, ?> map = sp.getAll();
return map;
} public static void clear(Context context, String filename) {
SharedPreferences sp = context.getSharedPreferences(filename, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.clear();
editor.apply();
} public static boolean contains(Context context, String filename, String key) {
SharedPreferences sp = context.getSharedPreferences(filename, Context.MODE_PRIVATE);
return sp.contains(key);
} }
android 文件存储&SharedPreferences的更多相关文章
- Android 文件存储浅析
最近做的一个需求和文件存储有关系.由于之前没有系统梳理过,对文件存储方面的知识一直很懵懂.趁着周末有时间,赶紧梳理一波. 这首从网上找到的一张图,很好的概括了外部存储和内部存储. 下面我们再来具体介绍 ...
- 4、Android-数据存储方案(文件存储/SharedPreferences)
简介: 任何一个应用程序都需要和数据进行交互 对于软件来说微博.QQ等都需要关系的是数据 没有数据的应用程序是一个没有灵魂的软件 而且还没有实际的用途 可以认为是单机 4.1.持久化技术的简介 数据持 ...
- Android文件存储
文件存储是Android中最基本的一种数据存储方式,它不读存储的内容进行任何的格式化处理,所有数据原封不动的保存在文件之中.如果想用文件存储的方式保存一些较为复杂的数据,就需要定义一套自己的格式规范, ...
- android: 文件存储
数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑 关机的情况下,这些数据仍然不会丢失.保存在内存中的数据是处于瞬时状态的,而保存在 存储设备中的数据是处于持久状态的,持久化 ...
- android文件存储位置切换
最近有个需求,助手的google卫星地图和OpenCycleMap下载的离线地图数据,要能够在内置存储和外置存储空间之间切换,因为离线瓦片数据非常大,很多户外用户希望将这些文件存储在外置TF卡上,不占 ...
- 转:Android文件存储路径getFilesDir()与getExternalFilesDir的区别
作为一个开发者,我们经常需要通过缓存一些文件到SD卡中,常见的方式就是,通过: File sdCard = Environment.getExternalStorageDirectory(); 获取S ...
- android本地存储SharedPreferences
SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-value(键值对)SharedPreferences常用来 ...
- 程序员带你学习安卓开发系列-Android文件存储
这是程序员带你学习安卓开发系列教程.本文章致力于面向对象程序员可以快速学习开发安卓技术. 上篇文章:.Net程序员快速学习安卓开发-布局和点击事件的写法 主要讲解了布局和点击事件的写法. 上篇文章补充 ...
- Android文件存储使用参考
可能遇到的问题 android系统自身自带有存储,另外也可以通过sd卡来扩充存储空间.前者好比pc中的硬盘,后者好移动硬盘. 前者空间较小,后者空间大,但后者不一定可用. 开发应用,处理本地数据存取时 ...
随机推荐
- MyBatis架构分析
我们都知道Mybatis是一个非常小巧灵活的ORM框架,深受国内广大开发者的喜爱,我们知道它的出现某种程度是为了消除所有的JDBC代码和参数的手工设置以及结果集的封装问题:基于这个一点,我们就可以 ...
- C语言入门-mingw64安装+配置
OK,大家好,结合上期所说,本期让我们来配置编译器吧! 首先先下载mingw64离线包,官网下载慢,可以去群里下载,*.7z格式(有些同学可能没有解压软件,为了照顾这部分同学,笔者提供*.exe格式的 ...
- JavaCV 采集摄像头及桌面视频数据
javacv 封装了javacpp-presets库很多native API,简化了开发,对java程序员来说比较友好. 之前使用JavaCV库都是使用ffmpeg native API开发,这种方式 ...
- java常用算法笔记
1.将一个10进制的c转换为n进制 String s=new BigInteger(c+"",10).toString(n); 2. 求一个解退出 System.exit(0): ...
- PTA 报数
6-3 报数 (20 分) 报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号.从第一个人开始报数,报到m(<)的人退出圈子:下一个人从1开始报数,报到m的人退出圈子.如此下去,直到留 ...
- (一)SpringBoot启动过程的分析-启动流程概览
-- 以下内容均基于2.1.8.RELEASE版本 通过粗粒度的分析SpringBoot启动过程中执行的主要操作,可以很容易划分它的大流程,每个流程只关注重要操作为后续深入学习建立一个大纲. 官方示例 ...
- 通过《第一行代码》学习 Android 开发
第一行代码 Android --第 2 版-- 郭霖 著 第 1 章:开始启程--你的第一行 Android 代码 •1.2 手把手带你搭建开发环境 Android Studio 的安装及配置 A ...
- IT培训有哪些坑(三)?
我们继续来说说IT培训的坑,今天讲的这点,非常重要,几乎适合于所有层面的培训,不仅仅是IT行业.近期有参加各种培训打算的,包括各种营销培训,管理培训等等,都是有用的. 有大企业,名人背景的不靠谱.不要 ...
- 网关Ocelot功能演示安排的明明白白~~~
前言 网关(Gateway)在微服务架构中至关重要,可以将其理解为是外部客户端(前端.MVC后台等调用方)与后台服务的连接点,通过这层可以做统一的处理,比如路由.身份认证和授权.服务治理等: 网关的好 ...
- Java 时间日期系列
Java Calendar,Date,DateFormat,TimeZone,Locale等时间相关内容的认知和使用(1) Calendar Java Calendar,Date,DateFormat ...