技术标签: android的缓存地址
应用程序程序在第一次打开的时候,我们会把一些常用的数据保存到本地;
或者应用程序在运行的时候,需要保存一些记录的(比如记事本),因为耗子的工作需要保存填写的一些表单在本地,所以就整理了一下如何简单的把数据保存到本地。
我们主要用到的方法就是下面这四个方法,看名字就可以看出来。
getExternalCacheDir()
getExternalFilesDir()
getCacheDir()
getFilesDir()
把他们分成了两组,一一来讲解
Context.getExternalFilesDir()可以获取到SDCard/Android/data/你的应用的包名/files/ 目录路径,一般长时间保存的数据
Context.getExternalCacheDir()可以获取到SDCard/Android/data/你的应用的包名/cache/ 目录路径,一般临时保存的数据
Context.getCacheDir() 该方法返回/data/data/你的应用的包名/cache目录路径
Context.getFilesDir() 该方法返回/data/data/你的应用的包名/file目录路径。
这两组的区别主要是一个是保存到内存卡、一个是手机内部。为什么我们要使用它们做路径呢?
如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/
而且上面二个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项
如果要保存下载的内容,就不要放在以上目录下
下面放一个封装的小工具类。
public class DataCacheUtil {
/**
* 通过result生成缓存文件
*
* @param fileUrl
* @param resule
* @return
*/
public boolean create(String fileUrl, String resule) {
try {
String temp = resule;
BASE64Encoder base64en = new BASE64Encoder();
String tempjiami = base64en.encode(temp.getBytes("UTF-8"));
File file = new File(fileUrl);
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(fileUrl);
fw.write(tempjiami, 0, tempjiami.length());
fw.flush();
fw.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 删除缓存文件
* @param fileURL
*/
public void deleteXML(String fileURL){
File file = new File(fileURL);
if (file.exists()) {
file.delete();
}
}
/**
* 读取文件中的内容按照字符读取
* @param fileURL
*/
public String readFileByChars(String fileURL) {
StringBuffer result = new StringBuffer();
StringBuffer tempResult = new StringBuffer();
Reader reader = null;
try {
char[] tempchars = new char[10];
int charread = 0;
reader = new InputStreamReader(new FileInputStream(fileURL));
// 读入多个字符到字符数组中,charread为一次读取字符数
while ((charread = reader.read(tempchars)) != -1) {
// 屏蔽掉\r不显示
if ((charread == tempchars.length)
&& (tempchars[tempchars.length - 1] != '\r')) {
tempResult.append(tempchars);
} else {
for (int i = 0; i < charread; i++) {
if (tempchars[i] == '\r') {
continue;
} else {
tempResult.append(tempchars[i]);
}
}
}
}
BASE64Decoder base64De = new BASE64Decoder();
result.append(new String(base64De.decodeBuffer(tempResult.toString()), "UTF-8" ));
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
return result.toString();
}
/**
* 获取可用的缓存目录
* @param context
* @param filename
* @return
*/
public static String getCacheDir(Context context,String filename){
String fileURL = null;
//如果外部存储为空时则用内部存储的路径
if (context.getExternalCacheDir() != null) {
fileURL = context.getExternalCacheDir().toString()+"/"+ filename;
} else {
fileURL = context.getCacheDir().toString() + "/"+ filename;
}
return fileURL;
}
}
文章浏览阅读136次。Cadence 17.4 配置Capture.ini让CIS数据库界面查看PCB封装?_allegro footprints section could not be located in capture.ini
文章浏览阅读1.8k次。高分辨率模式就是将示波器采集到的一个波形中的相邻多个点做平均。注意和平均模式的区别,平均模式是多个波形相同位置点做平均,而高分辨率模式是把一个波形中相邻的点做平均。_示波器高分辨率模式
文章浏览阅读1.9k次,点赞16次,收藏41次。点击确定就切换为我们自己的工具啦,如果没找到Mytool,可能之前没有同步,主界面右下方tool0也没有更改为Mytool。点击同步,为后面的示教器更改做准备,没有这一步示教器可能找不到Mytool选项,然后画出来的图轨迹也是浮在空中。比如在圆上,位于A点,想要到达B点,可以顺时针也可以逆时针走,不指定中途点会有歧义。还记得之前的经过C再到B吗,这里的p20就是中途点,p30就是目标点。比如说想把零件往上挪一点,就可以把z坐标调大一点,点击应用。返回示教器界面,修改位置,第一个点就改好啦,熟悉后很快的。_robotstudio教程入门
文章浏览阅读816次。ZooKeeper是一个分布式应用协调服务,主要用于解决分布式集群中应用系统的一致性问题。它能提供类似文件系统的目录节点树方式的数据存储,主要用途是维护何监控所存数据的状态变化,以实现对集群的管理。在分布式环境里,往往会有很多服务器都需要同样的配置来保证信息的一致性和集群的可靠性,而一个分布式集群往往会有上百台服务器,一旦配置信息改变,就需要对每台服务器进行修改,这样会消耗大量时间。_zookeeper命名空间
文章浏览阅读344次,点赞6次,收藏10次。通过这则消息,我们了解到阿里云将停止提供免费SSL证书服务。作为国内领先的云计算服务提供商,阿里云拥有其它丰富的产品线和优势,为用户提供全面的云计算解决方案。对于已经使用了免费SSL证书的用户,他们需要及时采取措施,选择新的证书以确保网站的安全性。同时,宁德阿里云代理商作为阿里云的合作伙伴,在此消息中起到了及时提醒和指导用户的作用。_阿里云免费证书没有了
文章浏览阅读1w次,点赞6次,收藏24次。2022年迎来了最后一个月,我们可以看到,在这一年中编程语言起起伏伏,有的语言始终炙手可热,而有的语言却逐渐“没落”…日前,全球知名TIOBE编程语言社区发布了12月编程语言排行榜,有哪些新变化?下面一起来看看吧!TIOBE 12月Top15编程语言:Python语言TIOBE指数趋势:详细榜单查看TIOBE官网https://www.tiobe.com/tiobe-index/TIOBE编程社区指数是编程语言“流行度”的一个指标,据最新榜单显示,与上个月比,编程语言Top5没有太多变化,Python_node语言排行
文章浏览阅读5w次,点赞44次,收藏198次。前言 在对字符串操作时,如果感觉自己写的很复杂时,可以试试string模块,里面有很多实用的属性。>>> import string>>> dir(string)['Formatter', 'Template', '_ChainMap', '_TemplateMetaclass', '__all__', '__builtins__', '_..._string.punctuation
文章浏览阅读4.8k次,点赞26次,收藏62次。设有P个样本,我们不知道它们实际上应该分成多少类,为保险起见,可假设M=P(P个样本分成P类),这样,当N_机器学习 深度学习 神经网络
文章浏览阅读2.4k次。Unity实现简单下雨效果(粒子效果)_unity下雨效果
文章浏览阅读7.3k次。為了學習 Cisco 交換機 Tacacs + 遠程登陸驗證功能, 搭建以下測試環境 目的:學習 AAA 驗證模式, 設置成以下登陸方式1) Console 口不需要驗證2) vty 0 本地驗證3) vty 1 5 遠程驗證 實現步驟:一、安裝 Windows Server 2003 sp2過程省略 二、安裝 Java 環境jre-7_cisco secure acs4可以安装到win吗
文章浏览阅读2.6k次,点赞34次,收藏31次。时间序列模型在解决实际问题时,序列必须满足特定的数据分布,或者具有平稳的时间序列特性,比如在剔除趋势数据后,时间序列不能与时间有依赖关系,数据波动的频率和幅度不能随时间变化等。——举例来说,随意挑选两个特征构建它们的散点图,如下图所示,图中每个点有两个特征,分别对应X轴和Y轴,在图中画一条直线,将所有点投影到这条线上就可以构建出一个新的特征(新的X轴)——它可以。,不存在普遍适用的最优算法。,如果变量之间存在关联,那么使用更少的综合变量来代替原变量,减少数据维度,理论上可行的——_时序数列机器ai学习算法
文章浏览阅读1.9k次。从数据库读取数据然后转为json时遇到:TypeError: Object of type date is not JSON serializableTypeError: Object of type Decimal is not JSON serializable等错误,发现需要在json.dumps()时传入一个参数,如下class DateEncoder(json.JSONEncoder): def default(self, obj): # 处理返回数据中有date类_json.dumps(event, ensure_ascii=false) 报错typeerror: object of type datetime