android app文件目录结构

转:https://blog.csdn.net/luoguopeng/article/details/72832567

android app目录: SDCard/Android/data/你的应用的包名/

原来,只要把文件写在这里的话,可以不用动态申请权限,只要在manifest里面声明权限就ok了;

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

并且在API
6.0之后,根目录文件存储是需要用户授权的,就算你在AndroidManifest.xml中配置了存储权限,用户不授权也是写不进去了。

SD卡读写权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>'''

如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,该怎么办呢?

通过

context.getExternalFilesDir()

可以得到

SDCard/Android/data/你的应用的包名/files/

这个目录里面,一般放一些长时间保存的数据

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

context.getExternalCacheDir()

方法可以获取到

 SDCard/Android/data/你的应用包名/cache/
这个目录里面,一般存放临时缓存数据

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

这个方法获得的文件存储路径适用于6.0以后系统,只要AndroidManifest.xml配置读写权限了,就不需要用户再授权了。

正常开发中获取存储路径的方法是:

public String getDiskCacheDir(Context context) {    
    String cachePath = null;    
    if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())    
            || !Environment.isExternalStorageRemovable()) {    
        cachePath = context.getExternalCacheDir().getPath();    
    } else {    
        cachePath = context.getCacheDir().getPath();    
    }    
    return cachePath;    
}    

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

设置->应用->应用详情里面的”清除数据“与”清除缓存“选项分别对应的是data/data/<application package>/和data/data/<application package>/cache

external storage (外部存储):

Environment.getExternalStorageDirectory()SD根目录:/mnt/sdcard/ (6.0后写入需要用户授权)

context.getExternalFilesDir(dir)路径为:/mnt/sdcard/Android/data/< package name >/files/…

context.getExternalCacheDir()路径为:/mnt/sdcard//Android/data/< package name >/cache/…

internal storage(内部存储):

context.getFilesDir()路径是:/data/data/< package name >/files/…

context.getCacheDir()路径是:/data/data/< package name >/cach/…

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文件存储和清理: 可以看到,当SD卡存在或者SD卡不可被移除的时候,就调用getExternalCacheDir(...
    3Q竹林阅读 6,993评论 0 2
  • 版权声明:本文为作者原创,转载必须注明出处。 转载请注明出处:http://www.jianshu.com/p/7...
    Stan_Z阅读 5,344评论 0 7
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,856评论 25 709
  • 读完王潇的《按自己的意愿过一生》,写下此篇。 说起来,与王潇,与此书,与“想象要狂野,预言要自证”,有种微妙的关系...
    茜茜的自嗨世界阅读 5,760评论 0 0
  • 患上一种看到猫就想拍的病 期待着有一天能养猫 然而……我对猫毛过敏啊喂【哭】 这是买相机以后 在学校拍的第一张照片...
    不帅你报警哼阅读 3,790评论 0 2