一、基础知识

应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。
大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。
这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。
如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,该怎么办呢?

通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据

通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据

如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/data/你的应用的包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。

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

 

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

 

二、图片实例

 

                   Android/data 目录                                        Android/data/应用包名

 

           

android so 存放存放目录_数据

             

android so 存放存放目录_Android_02


2.、

缓存


    1. String cachePath1 =  context.getExternalCacheDir().getPath();  
    2. String cachePath2 =  context.getCacheDir().getPath();  
    3. KLog.d( "cachePath1--" + cachePath1 ) ;  
    4. KLog.d( "cachePath2--" + cachePath2 )


    结果:


      1. cachePath1--/storage/emulated/0/Android/data/com.zyj.app/cache  
      2. cachePath2--/data/user/0/com.zyj.app/cache


       

      3、模拟器缓存

      context.getExternalCacheDir().getPath();    --->     /storage/emulated/0/Android/data/com.app/cache    
      1、这个目录可以在手机上看到,不用root , 这个目录的存在于外部SD卡上的。
      2、app卸载后,这个目录的数据全部被系统清除。

      总结:

      context.getExternalCacheDir()  、 context.getCacheDir()

      相同点:

      1、相同点:都可以做app缓存目录。

      2、app卸载后,两个目录下的数据都会被清空。

       

      不同点:

      1、目录的路径不同。前者的目录存在外部SD卡上的。后者的目录存在app的内部存储上。

      后者的路径需要root以后,用Root Explorer 文件管理器才能看到。

       

      需要注意的事项:

      1、由于context.getExternalCacheDir() 的目录存在外部SD卡上的,所以在使用这个方法的时候要判断外部SD卡的状态是否可用。






      Environment.getDataDirectory().getPath()=/data
      Environment.getDownloadCacheDirectory().getPath()=/cache
      Environment.getExternalStorageDirectory()=/storage/emulated/0
      Environment.getRootDirectory().getPath()=/system
      //警报的铃声
      Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS).getPath()=/storage/emulated/0/Alarms
      //相机拍摄的图片和视频保存的位置
      Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath()=/storage/emulated/0/DCIM
      //下载文件保存的位置
      Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath()=/storage/emulated/0/Download
      //电影保存的位置
      Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES).getPath()=/storage/emulated/0/Movies
      //音乐保存的位置
      Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getPath()=/storage/emulated/0/Music
      //通知音保存的位置
      Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_NOTIFICATIONS).getPath()=/storage/emulated/0/Notifications
      //下载的图片保存的位置
      Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath()=/storage/emulated/0/Pictures
      //用于保存podcast(博客)的音频文件
      Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PODCASTS).getPath()=/storage/emulated/0/Podcasts
      //保存铃声的位置
      Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES).getPath()=/storage/emulated/0/Ringtones
      context.getCacheDir().getPath()=/data/data/包名/cache
      context.getFilesDir().getPath()=/data/data/包名/files
      context.getObbDir().getPath()=/storage/emulated/0/Android/obb/包名
      context.getExternalCacheDir().getPath()=/storage/emulated/0/Android/data/包名/cache
      context.getExternalFilesDir(Environment.DIRECTORY_ALARMS).getPath()=/storage/emulated/0/Android/data/包名/files/Alarms
      context.getExternalFilesDir(Environment.DIRECTORY_DCIM).getPath()=/storage/emulated/0/Android/data/包名/files/DCIM
      context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getPath()=/storage/emulated/0/Android/data/包名/files/Download
      context.getExternalFilesDir(Environment.DIRECTORY_MOVIES).getPath()=/storage/emulated/0/Android/data/包名/files/Movies
      context.getExternalFilesDir(Environment.DIRECTORY_MUSIC).getPath()=/storage/emulated/0/Android/data/包名/files/Music
      context.getExternalFilesDir(Environment.DIRECTORY_NOTIFICATIONS).getPath()=/storage/emulated/0/Android/data/包名/files/Notifications
      context.getExternalFilesDir(Environment.DIRECTORY_PICTURES).getPath()=/storage/emulated/0/Android/data/包名/files/Pictures
      context.getExternalFilesDir(Environment.DIRECTORY_PODCASTS).getPath()=/storage/emulated/0/Android/data/包名/files/Podcasts
      context.getExternalFilesDir(Environment.DIRECTORY_RINGTONES).getPath()=/storage/emulated/0/Android/data/包名/files/Ringtones
      context.getDatabasePath("XXX").getPath()=/data/data/包名/databases/XXX
      context.getPackageCodePath()=/data/app/包名-2/base.apk
      context.getPackageResourcePath()=/data/app/包名-2/base.apk