`
ch_kexin
  • 浏览: 875682 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

getcachedir和getexternalcachedir的区别

 
阅读更多

getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()区,有需要的朋友可以参考下。

getCacheDir()方法用于获取/data/data/<application package>/cache目录

getFilesDir()方法用于获取/data/data/<application package>/files目录

 

应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。
大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。
这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。
如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,该怎么办呢?
通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/data/你的应用的包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。

而且上面二个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项

如果要保存下载的内容,就不要放在以上目录下

 较优秀的程序都会专门写一个方法来获取缓存地址,如下所示:

publicStringgetDiskCacheDir(Contextcontext){
StringcachePath = null;
//Environment.getExtemalStorageState() 获取SDcard的状态 

//Environment.MEDIA_MOUNTED 手机装有SDCard,并且可以进行读写


if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
||!Environment.isExternalStorageRemovable()){
cachePath=context.getExternalCacheDir().getPath();
}else{
cachePath=context.getCacheDir().getPath();
}
returncachePath;
}

 

可以看到,当SD卡存在或者SD卡不可被移除的时候,就调用getExternalCacheDir()方法来获取缓存路径,否则就调用getCacheDir()方法来获取缓存路径。前者获取到的就是/sdcard/Android/data/<application package>/cache 这个路径,而后者获取到的是 /data/data/<application package>/cache 这个路径。

文件的新建和读写:

File saveFile=new File("/sdcard/zhzhg.txt");
或:File sdCardDir=new File("/sdcard");//获取SD卡目录
File saveFile=new File(sdCardDir,"zhzhg.txt");
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("文件的读写".getBytes());
outStream.close();

android 获取系统默认路径

Environment.getDataDirectory().getPath(): /data
Environment.getDownloadCacheDirectory().getPath()  : /cache
Environment.getExternalStorageDirectory().getPath(): /mnt/sdcard
Environment.getRootDirectory().getPath()           : /system
Context.getCacheDir().getPath()                    : /data/data/com.zhd/cache
Context.getExternalCacheDir().getPath()            : /mnt/sdcard/Android/data/com.zhd/cache
Context.getFilesDir().getPath()                    : /data/data/com.zhd/files
Context.getObbDir().getPath()                      : /mnt/sdcard/Android/obb/com.zhd
Context.getPackageName()                           : com.zhd
Context.getPackageCodePath()                       : /data/app/com.zhd-1.apk
Context.getPackageResourcePath()                   : /data/app/com.zhd-1.apk

 

 

 

 

 

分享到:
评论
1 楼 michaelye1988 2017-03-15  
不错,很棒!

相关推荐

    henry_7getCacheDir

    ListView多选.txt getCacheDir的用法 代码

    安卓filesave

    File file new File context getCacheDir edit title+&quot; txt&quot; ; FileOutputStream fos; fos new FileOutputStream file ; fos write edit content getBytes ; fos close ; return...

    CacheManage::fire:android缓存管理器,分为内存缓存和文件缓存两种 先取内存数据,没有再从文件缓存中取

    先取内存数据,没有再从文件缓存中获取特点封装,继承其所有功能二级缓存内存缓存(采用SoftReference和LruCache,防止内存溢出)文件缓存(由ASimpleCache实现)默认使用SD卡缓存getCacheDir()获取的缓存文件较容易...

    Android实现文件的保存与读取功能示例

    注: 在Activity中有 getFileDir() 和 getCacheDir(); 方法可以获得当前的手机自带的存储空间中的当前包文件的路径 getFileDir() —– /data/data/cn.xxx.xxx(当前包)/files getCacheDir() —– /data/data/...

    Android代码-GlideCatchSimple

    GlideCatchSimple Glide缓存Simple 缓存路径的指定 缓存大小的获取 磁盘缓存清除(两种方法) ....getCacheDir() "/" GlideCatchConfig.GLIDE_CARCH_DIR))); } catch (Exception e) { e.printStackTrace();

    Android 文件存储及常见问题解决

    Android文件存储 ... cacheDir=mContext.getExternalCacheDir().getPath(); }else { cacheDir=mContext.getCacheDir().getPath(); } fileOutputStream=new FileOutputStream(cacheDir+/+url); 这

    android保存文件

    1. 代码直接可用,程序带有简单界面 2. 保存的路径中项目文件下面:路径 getFileDir() ----- /data/data/...getCacheDir() ----- /data/data/cn.xxx.xxx(当前包)/cache 3. 我运行的版本为4.2.2和4.0.3均可以使用

    Android-存储路径与管理应用文件存储方法汇总

    一、获取设备存储路径  Android手机存储分为两个部分:内部存储和外部存储,内部存储一般是手机自带的存储空间,外部存储指外插SD卡...mContext.getCacheDir() /data/user/0/package name/cache mContext.getDir(spa

    APIservice-Sample:任何带有 OkHttp + Retrofit 的 API 服务的样板代码示例

    APIservice-Sample 带有 OkHttp + Retrofit 的任何 API 服务的样板样板代码此示例展示了为任何端点创建客户端的简单方法(使用 github)##To 在您自己的端点中设置使用 ... .setCacheDir(getCacheDir())

    disk-lru-cache::floppy_disk:具有持久日志的磁盘LRU缓存

    该缓存具有特定的容量和位置。 很少使用的文件会被主动使用逐出。 轻巧且易于使用。添加依赖步骤1.将JitPack存储库添加到您的构建文件中allprojects {repositories {.. .maven { url ' https://jitpack.io ' }}} ...

    Goster:android 的 Url 图像管理库。 您可以下载,设置图像

    当您将更改推送到图像视图时,它开始下载、解码和设置。 Goster gst = Goster . with(context) .load(imageurl) .cache( true ) .fade( true ) .into(imageView); 您可以使用getSavingPath...

    APKLoader:加载一个APK文件并使用反射来执行一个方法

    APK加载器 加载一个APK文件并使用反射来执行一个方法 用法 加载 APK: // Class you wan to load ... // Apk Name String appName = " StaticMath.apk " ;...String pathExternalStorage = ... getCacheDir() .

    Android 文件操作方法

    Activity(Context)Context.getCacheDir()方法用于获取/data/data/&lt;package&gt;/cache目录Context.getFilesDir()方法用于获取/data/data/&lt;package&gt;/files目录 Activity(Context)提供了openFileOutput(filename,mode)方法...

    Android开发之删除项目缓存的方法

    getCacheDir()能够得到当前项目的缓存地址 在项目中经常会使用到WebView 控件,当加载html 页面时,会在/data/data/应用package 目录下生成database与cache 两个文件夹。请求的url 记录是保存在WebViewCache.db,而url ...

    Retrofit + OkHttp缓存处理的示例代码

    通过缓存处理可以有效降低服务器的负荷,加快APP界面加载速度,提升用户体验。Retrofit + OkHttp缓存处理流程是这样的,请求响应之后会在data/data/packageName/cache下建立....getCacheDir(), responses); //设置缓存 10M

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    8.7 手机气象局,实时卫星云图——HttpURLConnection与URLConnection和运行线程 8.8 通过网络播放MP3——Runnable存储FileOutputStream技巧 8.9 设置远程下载音乐为手机铃声——RingtoneManager与铃声存放路径 8.10 ...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    8.7 手机气象局,实时卫星云图——HttpURLConnection与URLConnection和运行线程 8.8 通过网络播放MP3——Runnable存储FileOutputStream技巧 8.9 设置远程下载音乐为手机铃声——RingtoneManager与铃声存放路径 8.10 ...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    8.7 手机气象局,实时卫星云图——HttpURLConnection与URLConnection和运行线程 8.8 通过网络播放MP3——Runnable存储FileOutputStream技巧 8.9 设置远程下载音乐为手机铃声——RingtoneManager与铃声存放路径 8.10 ...

Global site tag (gtag.js) - Google Analytics