zoukankan      html  css  js  c++  java
  • Android存储及getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()区别

    存储介绍
    
    Android系统分为内部存储和外部存储,内部存储是手机系统自带的存储,一般空间都比较小,外部存储一般是SD卡的存储,空间一般都比较大,但不一定可用或者剩余空间可能不足。一般我们存储内容都会放在外部存储空间里。使用过程注意事项:
    
            先判断SD卡是否可用,可用时优先使用SD卡的存储,不可用时用内部存储
            存储在SD卡上时,可以在SD卡上新建任意一个目录存放,也可以存放在应用程序内部文件夹,区别是在SD卡的任意目录存放时内容不会随应用程序的卸载而消失,而在应用程序内部的内容会随应用程序卸载消失。
            一般缓存文件放在应用程序内部,用户主动保存的文件放在SD卡上的文件夹里。如果在SD卡上任意新建目录存放所有数据,用户卸载时会残存大量文件,招致用户反感。
    
    存储路径
    
    一般我们可以通过 Context 和 Environment 相关的方法获取文件存取的路径。
    1.内部存储
    
    1.1 根目录($rootDir):/data,通过 Environment.getDataDirectory() 获取。
    1.2 应用程序目录($applicationDir):$rootDir/data/包名(不一定,不同设备可能不同)
    应用缓存目录:$applicationDir/cache,通过Context.getCacheDir()获取。
    应用文件目录:$applicationDir/files,通过Context.getFilesDir()获取。Context.getFileStreamPath(String name)返回以name为文件名的子文件目录,若name为空,则返回文件根目录。假设我们的应用程序包名为com.learn.test,路径如下:
    
    Environment.getDataDirectory():      /data
    Context.getCacheDir():               /data/data/com.learn.test/cache
    Context.getFilesDir():               /data/data/com.learn.test/files
    Context.getFileStreamPath(""):       /data/data/com.learn.test/files
    Context.getFileStreamPath("test"):   /data/data/com.learn.test/files/test
    
    
    
    2.外部存储
    
    2.1 根目录($rootDir):/storage/emulated/0(不一定,不同设备可能不同),通过 Environment.getExternalStorageDirectory() 获取。
    2.2 应用程序目录($applicationDir):$rootDir/Andorid/data/包名
    应用缓存目录:$applicationDir/cache,通过Context.getExternalCacheDir()获取。
    应用文件目录:$applicationDir/files,通过Context.getExternalFilesDir(String type),type为空字符串时获取。type系统给我们提供了很多常用的类型,比如图片和下载等等:
    
    public static String DIRECTORY_MUSIC = "Music";
    public static String DIRECTORY_ALARMS = "Alarms";
    public static String DIRECTORY_NOTIFICATIONS = "Notifications";
    public static String DIRECTORY_PICTURES = "Pictures";
    public static String DIRECTORY_MOVIES = "Movies";
    public static String DIRECTORY_DOWNLOADS = "Download";
    public static String DIRECTORY_DCIM = "DCIM";
    public static String DIRECTORY_DOCUMENTS = "Documents";
    
    
    
    假设我们的应用程序包名为com.learn.test,路径如下:
    
    Environment.getExternalStorageDirectory():               /storage/emulated/0
    Context.getExternalCacheDir():                           /storage/emulated/0/Android/data/com.learn.test/cache
    Context.getExternalFilesDir(""):                         /storage/emulated/0/Android/data/com.learn.test/files
    Context.getExternalFilesDir("test"):                     /storage/emulated/0/Android/data/com.learn.test/files/test
    Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES):    /storage/emulated/0/Android/data/com.learn.test/files/Pictures
    
    
    2.3 公共存储目录: 我们可以在外部存储上新建任意文件夹,不过在6.0及之后的系统需要动态申请权限,这些目录的内容不会随着应用的卸载而消失。如:
    
    Environment.getExternalStorageDirectory():                     /storage/emulated/0
    Environment.getExternalStoragePublicDirectory(""):             /storage/emulated/0
    Environment.getExternalStoragePublicDirectory("test"):         /storage/emulated/0/test
    Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES):  /storage/emulated/0/Pictures
    
    
  • 相关阅读:
    能否获取倒数第二个指定字符的位置? 截取
    css布局之头尾固定中间高度自适应
    C# Convert.ToInt32和int.Parse转换null和空字符串时的不同表现
    当前上下文中不存在viewbag
    IIS 7.5 上传文件大小限制
    git 学习笔记
    sql like 语句
    js文件,同样的路径,拷贝过来的为什么不能访问
    软件项目开发报价(一)
    asp.net core webapi 日期返回中出现字母T
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/11937671.html
Copyright © 2011-2022 走看看