转:Android文件存储路径getFilesDir()与getExternalFilesDir的区别
作为一个开发者,我们经常需要通过缓存一些文件到SD卡中,常见的方式就是,通过:
File sdCard = Environment.getExternalStorageDirectory();
获取SD卡根目录,然后自定义文件/文件名进行文件存储.这样做法的结果就是,当手机安装了大量的app时,
SD卡根目录会迅速变得杂乱不堪。并且在API 6.0之后,根目录文件存储是需要用户授权的,就算你在
AndroidManifest.xml中配置了存储权限,用户不授权也是写不进去了.
SD卡读写权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
其实,Google已经提供了最佳的外部存储方案,那就是统一路径为:
/Android/data/< package name >/files/… (该路径通常挂载在/mnt/sdcard/下)
外部存储路径调用方法是:context.getExternalFilesDir(dir).getAbsolutePath() //通过context调用,
参数dir为自自定义文件夹.
这个方法获得的文件存储路径适用于6.0以后系统,主要AndroidManifest.xml配置读写权限了,
就不需要用户再授权了.
以上,是关于外部存储的介绍,那么如果有些手机没有SD卡或者系统自身没有分配外部存储空间,时,
我们应该怎么缓存数据呢?
那就需要用到内部存储了,内部存储的路径是: /data/data/< package name >/files/…
(该路径挂载在在手机自身存储目录)
内部存储路径调用方法是:context().getCacheDir().getAbsolutePath() //通过context调用
因此,正常开发中获取存储路径的方法是:
/**
*
* @param context 上下文对象
* @param dir 存储目录
* @return
*/
public static String getFilePath(Context context,String dir) {
String directoryPath="";
//判断SD卡是否可用
if (MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ) {
directoryPath =context.getExternalFilesDir(dir).getAbsolutePath() ;
// directoryPath =context.getExternalCacheDir().getAbsolutePath() ;
}else{
//没内存卡就存机身内存
directoryPath=context.getFilesDir()+File.separator+dir;
// directoryPath=context.getCacheDir()+File.separator+dir;
}
File file = new File(directoryPath);
if(!file.exists()){//判断文件目录是否存在
file.mkdirs();
}
LogUtil.i("filePath====>"+directoryPath);
return directoryPath;
}
其中,getExternalCacheDir()与getCacheDir()的区别 与getExternalFilesDir()及getFilesDir()的区别相同,
前者只是在路径下自动建好了一个cach文件目录:/data/< package name >/files/cach/...
存储区别简明示意图如下:
本文转自:https://blog.csdn.net/losefrank/article/details/53464646
转:Android文件存储路径getFilesDir()与getExternalFilesDir的区别的更多相关文章
- Android 文件存储浅析
最近做的一个需求和文件存储有关系.由于之前没有系统梳理过,对文件存储方面的知识一直很懵懂.趁着周末有时间,赶紧梳理一波. 这首从网上找到的一张图,很好的概括了外部存储和内部存储. 下面我们再来具体介绍 ...
- unity中的文件存储路径与各平台(Android,iOS)的关系
原文链接:unity中的文件存储路径与各平台(Android,iOS)的关系 主要是这个问题困扰我了一阵子,所以特写写... unity中的的各种存储方法的对应关系(直接上截图吧) 重点说的是Appl ...
- 截取linux文件存储路径方法
1.截取linux文件存储路径方法 package com.tydic.eshop.action.freemarker; public class dddd { public static void ...
- 修改Jupyter Notebook默认文件存储路径(已安装Anaconda)
https://blog.csdn.net/weixin_44799144/article/details/91823079 修改Jupyter Notebook默认文件存储路径首先,安装好Anaco ...
- 【HANA系列】SAP HANA的ini文件存储路径
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA的ini文件存储 ...
- 安卓各文件存储路径汇总(Android file path)
写下来,省得以后不记得到处翻: Environment.getDataDirectory() = /data Environment.getDownloadCacheDirectory() = /ca ...
- Android文件存储使用参考
可能遇到的问题 android系统自身自带有存储,另外也可以通过sd卡来扩充存储空间.前者好比pc中的硬盘,后者好移动硬盘. 前者空间较小,后者空间大,但后者不一定可用. 开发应用,处理本地数据存取时 ...
- Android 文件存放路径【转】
对于应用携带的静态数据,可以放置在应用的assets目录或者res,raw目录下.对于assets目录下的静态数据,存在当文件最大支持1MB的局限,读取方式如下: 1 InputStream is = ...
- android 文件存储&SharedPreferences
一.文件存储 文件存储主要是I/O流的操作,没什么好说的,需要注意的是保存文件的各个目录. 下面为常用的目录: public static File getInFileDir(Context cont ...
随机推荐
- 转 php简单伪静态实例
mod_rewrite是Apache的一个非常强大的功能,它可以实现伪静态页面.下面我详细说说它的使用方法!对初学者很有用的哦! 1.检测Apache是否支持mod_rewrite 通过php提供的p ...
- Effective前端(3)用CSS画一个三角形
来源:https://zhuanlan.zhihu.com/p/26160325 三角形的场景很常见,打开一个页面可以看到各种各样的三角形: 由于div一般是四边形,要画个三角形并不是那么直观.你可以 ...
- java开发微信模板消息推送
发布时间:2018-12-12 技术:springboot+maven 概述 该demo主要涉及微信模板消息推送功能, 详细 代码下载:http://www.demodashi.com/dem ...
- JavaScript callback function 回调函数的理解
来源于:http://mao.li/javascript/javascript-callback-function/ 看到segmentfault上的这个问题 JavaScript 回调函数怎么理解, ...
- Ubuntu 10.04里安装强大抓图工具Shutter
Shutter 原名叫GScrot,是一款Linux下很强大的抓图工具,支持截取全屏幕,窗口,自选区域以及网页的图像,并且截取后的图像还可以简单编辑,Shutter还支持插件功能,矩齿,边缘化,碎纸, ...
- 预加载与智能预加载(iOS)
来源:Draveness(@Draveness) 链接:http://www.jianshu.com/p/1519a5302141 前两次的分享分别介绍了 ASDK 对于渲染的优化以及 ASDK 中使 ...
- build high performance server 转载
http://blog.ci123.com/wobushizhanghua/entry/246311 先后查看了haproxy,l7sw和lighttpd的 相关源码,无一例外,他们一致认为多路复用是 ...
- k8s源码分析之kubelet
一.概述 二.Kubelet对象创建过程:(pkg/kubelet/kubelet.go ) NewMainKubelet 正如名字所示,主要的工作就是创建 Kubelet 这个对象,它包含了 kub ...
- CentOS 7 systemd的坑
一.概述 在从 CentOS 6 迁移到 CentOS 7 的过程中,可能有一些地方需要调整,最显著的地方莫过于 systemd 带来的改变,不同的管理服务的方式,不同的日志方式,设置时区,时间等等. ...
- SDL相关学习
原文地址:https://www.cnblogs.com/landmark/category/311822.html 介绍SDL图形库的使用 SDL显示文字 摘要: 前面教程里,我们只显示图片,没提到 ...