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中的硬盘,后者好移动硬盘. 前者空间较小,后者空间大,但后者不一定可用. 开发应用,处理本地数据存取时 ...
随机推荐
- Java方法:练习,控制台简易计算器
可以更改计算个数的简易计算器 package com.zdz.method; import java.util.Scanner; public class Operator { public stat ...
- concurrentHashMap扩容相关方法详解
上一个博客中说到了concurrentHashMap的put操作,在put操作之后如果添加了节点,我们首先会把全局的节点数+1,如果满足了扩容条件,我们则进行扩容 我们先从addCount方法说起 / ...
- Joomla框架搭建&远程代码执行(RCE)漏洞复现
一.漏洞描述 Joomla是一套内容管理系统,是使用PHP语言加上MYSQL数据库所开发的软件系统,最新版本为3.9.8,官网: https://downloads.joomla.org/,漏洞位于根 ...
- JavaScript中函数防抖、节流
码文不易,转载请带上本文链接,感谢~ https://www.cnblogs.com/echoyya/p/14565642.html 目录 码文不易,转载请带上本文链接,感谢~ https://www ...
- 干掉前端!3分钟纯 Java 注解搭个管理系统
大家好,我是小富~ 最近接触到个新项目,发现它用了一个比较有意思的框架,可以说实现了我刚入行时候的梦想,所以这里马不停蹄的和大家分享下. 在我刚开始工作接触的项目都还没做前后端分离,经常需要后端来维护 ...
- 对接快递100&聚水潭API
对接快递100&聚水潭API 入我相思门,知我相思苦. 简介:对接第三方平台快递100&聚水潭API的简要总结. 1.感悟 个人感觉快递100的API更友好一些,比如有SDK可以调用: ...
- python函数之闭包函数与无参装饰器
一.global与nonlocal #global x = 1 def f1(): global x # 声明此处是全部变量x x = 2 print(x) f1() # 调用f1后,修改了全局变量x ...
- [Fundamental of Power Electronics]-PART II-7. 交流等效电路建模-7.4 规范电路模型
7.4 规范电路模型 在讨论了推导开关变换器交流等效电路模型的几种方法后,让我们先停下来,说明下这些结果.所有的在 CCM下以PWM工作的DC-DC变换器都具有相似的基本功能.首先,他们在理想情况下, ...
- Dynamics CRM报表无法访问提示“报表服务器无法访问或使用加密密钥。你可能需要将服务器添加到扩展组,或重新导入”
当我们部署Dynamics CRM的环境的时候如果报表配置的不规范会出现很多问题,尤其是这个问题相对来说更棘手,解决起来非常麻烦. 网上很多教程都说直接到报表配置页删除密钥就可以了,实际上删除的时候会 ...
- CSS @property,让不可能变可能
本文主要讲讲 CSS 非常新的一个特性,CSS @property,它的出现,极大的增强的 CSS 的能力! 根据 MDN -- CSS Property,@property CSS at-rule ...