`
ch_kexin
  • 浏览: 902541 次
  • 性别: 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  
不错,很棒!

相关推荐

    android缓存机制分析.docx

    Android提供了getCacheDir()和getExternalCacheDir()方法,用于创建应用专属的缓存目录,确保在清除缓存时能准确地删除相关文件。 DataCleanManager是一个在Android应用中常见的缓存管理组件,它提供了多种清除缓存...

    android APPCache

    获取内部存储缓存的路径可以通过`Context`对象的`getCacheDir()`方法,而外部存储缓存路径则是`getExternalCacheDir()`。 接下来,我们讨论如何获取应用程序的缓存大小。Android系统并没有提供直接获取缓存大小的...

    MySave1.zip

    1. `getFilesDir()` 和 `getCacheDir()`:这两个方法分别返回应用的内部文件目录和缓存目录,用于保存应用产生的文件。 2. `openFileOutput(String fileName, int mode)`:在内部存储创建或打开一个文件,`mode`...

    获取缓存和清理

    但可以清理应用自己的外部存储缓存,通过`Context`的`getExternalCacheDir()`方法获取外部缓存目录,并类似地遍历和删除文件。 在实现清理功能时,需要注意以下几点: 1. **权限管理**:清理外部存储或系统缓存可能...

    开机自动边录音边播放的例子

    根据Android版本的不同,需要考虑使用getCacheDir()、getExternalCacheDir()、getFilesDir()等方法获取合适的存储路径,并且处理读写权限。 9. **异常处理**:在进行录音和播放过程中,可能出现各种异常,如文件不...

    android对文件和sd卡的各种操作

    1. 使用`getExternalFilesDir()`和`getExternalCacheDir()`代替直接操作外部存储根目录,这样当应用卸载时,系统会自动清理相关文件。 2. 使用`Context.openFileInput()`和`Context.openFileOutput()`进行内部存储...

    android 文件管理

    Android API提供`getExternalFilesDir()`和`getExternalCacheDir()`方法来访问特定于应用的外部存储目录。自Android 6.0(API级别23)起,需要运行时权限才能写入外部存储。 3. **SQLite数据库**:对于结构化数据,...

    Android 在Android远程上传以及下载图片---XFire框架.zip

    Android提供了`getCacheDir()`和`getExternalCacheDir()`等方法获取合适的存储位置。 7. **图片显示**:最后,下载的图片可以通过`ImageView`进行显示,可以使用`Picasso`、`Glide`等第三方库简化加载过程。 这个...

    高仿微信语音录制

    在Android上,我们可以使用getCacheDir()或getExternalCacheDir()获取存储位置。 3. **震动反馈**:为了提供与微信类似的体验,应用需要在录音开始和结束时触发设备的震动。在iOS中,我们使用...

    Android\源码\Android程序源码--文件下载功能

    1. **外部存储**:Android提供了getExternalFilesDir()和getExternalCacheDir()等方法,方便地将文件保存在外部存储上,同时保证了应用卸载时文件被清理。 2. **内部存储**:对于私有文件,可以使用getFilesDir()和...

    拍照上传源码.zip

    Android提供了`getCacheDir()`和`getExternalCacheDir()`等方法获取存储路径,同时要注意权限问题。 6. 上传图片:最后,使用HTTP客户端(如OkHttp或Retrofit)将图片数据发送到服务器。这部分代码会涉及到网络请求...

    Android 文件 内存目录获取 sdcard目录获取

    - 使用`getExternalFilesDir()`和`getExternalCacheDir()`确保应用数据在应用卸载后能被正确清理。 通过以上方法,开发者可以有效地在Android 2.3及其后续版本中获取和管理内存目录和SDCard目录,为用户提供安全、...

    Android Listiew 异步下载图片

    通常会将图片保存在应用的私有存储目录下,如外部存储的getCacheDir()或getExternalCacheDir()路径。 6. **第三方库使用**:Picasso和Glide是两个广泛使用的Android图片加载库,它们都支持自动缓存、图片压缩、占位...

    边下载边播music.zip

    - 音乐文件可能存储在外部存储(SD卡)或者内部存储,需要使用`Context`的`getExternalCacheDir()`或`getCacheDir()`方法来获取合适的存储路径。 10. **权限管理**: - 在Android 6.0及以上版本,需要动态请求`...

    Android 图片压缩与解压的方法

    2. **外部存储**:需要`WRITE_EXTERNAL_STORAGE`权限,使用`getExternalFilesDir()`或`getExternalCacheDir()`获取外部存储路径。用户可以访问这些文件,即使应用卸载后文件仍保留。 3. **ContentProvider**:对于...

    android调用系统相机拍照并将照片储存在缓存中,并以列表展示照片

    Android 提供了 `getCacheDir()` 和 `getExternalCacheDir()` 方法来获取缓存目录。例如,将 Bitmap 转换为 JPEG 格式并保存: ```java File cacheFile = new File(getCacheDir(), "image.jpg"); ...

    android文件路径详解

    - **getCacheDir()**: 提供一个临时缓存目录,用于存储应用的临时文件,系统可能会在内存不足时删除这些文件。 2. **外部存储(可卸载存储)** - **Environment.getExternalStorageDirectory()**: 返回SD卡的根...

    Android清理缓存功能实现源码

    Android应用有自己的缓存目录,可以通过`Context.getCacheDir()`获取内部缓存目录,`Context.getExternalCacheDir()`获取外部缓存目录。如果应用需要在外部存储创建自定义缓存目录,可以使用`Context....

    Android文件读写操作总结.zip

    4. 缓存存储:Context.getCacheDir()和Context.getExternalCacheDir()分别用于内部和外部缓存。 三、文件权限 自Android 6.0(API级别23)起,运行时权限管理引入,读写外部存储需要在运行时请求WRITE_EXTERNAL_...

Global site tag (gtag.js) - Google Analytics