美文网首页Android技术
Android 文件存储

Android 文件存储

作者: 子丿龙 | 来源:发表于2017-08-03 10:59 被阅读15次

    一直一来没有认真关注过android 的文件存储,现在做一个总结,我认为有用的,网上的博客真是写的叫一个渣渣,根本就是糊弄.

    App专属文件 vs App独立文件

    app专属文件就是那些只有该app才可以使用的文件,例如专属格式的电子书,app独立文件就是那些不依赖于某特定app的文件,例如照片。
    相关链接: http://blog.csdn.net/nugongahou110/article/details/48154859

    访问外部存储权限

    从Android 1.0开始,写操作受权限WRITE_EXTERNAL_STORAGE保护。

    从Android 4.1开始,读操作受权限READ_EXTERNAL_STORAGE保护。

    从Android 4.4开始,应用可以管理在它外部存储上的特定包名目录,而不用获取WRITE_EXTERNAL_STORAGE权限。

    比如,一个包名为com.example.foo的应用,可以自由访问外存上的Android/data/com.example.foo/目录。

    外部存储对数据提供的保护较少,所以系统不应该存储敏感数据在外部存储上

    特别地,配置和log文件应该存储在内部存储中,这样它们可以被有效地保护。

    对于多用户的情况,一般每个用户都会有自己独立的外部存储,应用仅对当前用户的外部存储有访问权限。

    Environment API的目录

    1. getDataDirectory:用户数据目录。
    2. getDownloadCacheDirectory:下载缓存内容目录。
    3. getExternalStorageDirectory:主要的外部存储目录。但是这个目录很可能当前不能访问,比如这个目录被用户的PC挂载,或者从设备中移除,或者其他问题发生,你可以通过getExternalStorageState来获取当前状态。( 为了不污染用户的根命名空间,一般不会直接使用这个外部存储的根目录 )

    任何应用私有的文件都应该被放置在Context.getExternalFilesDir返回的目录下,在应用被卸载的时候,系统会清理的就是这个目录。
    另一些共享文件应该被放置在 getExternalStoragePublicDirectory(String)返回的目录中。
    写这个路径需要WRITE_EXTERNAL_STORAGE权限,读需要 READ_EXTERNAL_STORAGE权限,当然写权限默认包含了读权限。

    KITKAT 即Android 4.4开始,如果你的应用只是需要存储一些内部数据,可以考虑使用
    getExternalFilesDir(String)
    或者
    getExternalCacheDir()
    它们不需要获取权限。

    4. getExternalStoragePublicDirectory : 这个方法接收一个参数,表明目录所放的文件的类型,传入的参数是Environment类中的DIRECTORY_XXX静态变量,比如DIRECTORY_DCIM等。

    注意:传入的类型参数不能是null,返回的目录路径有可能不存在,所以必须在使用之前确认一下,比如使用File.mkdirs创建该路径。

    5. getRootDirectory : 得到Android的根目录。
    6. isExternalStorageEmulated : 设备的外存是否是用内存模拟的,是则返回true。(API Level 11)
    7. isExternalStorageRemovable :设备的外存是否是可以拆卸的,比如SD卡,是则返回true。(API Level 9)

    Context API中的目录

    1. getExternalFilesDir : 是应用在外部存储上的目录.和Environment类的getExternalStoragePublicDirectory方法类似,返回包含参数指定的特定类型文件的子目录。
    2. getExternalCacheDir()是应用的在外部存储上的缓存目录。

    从Android 4.4这两个方法不需要读写权限,是针对于本应用来说,如果要访问其他应用的相关目录,还是需要声明读写权限。
    Android 4.4之前的版本要访问的话还是要声明读写权限的,如果没有在manifest中写权限,上面两个get方法都会返回null。

    与上面两个方法形成对比的是下面两个方法:
    getFilesDir()
    getCacheDir()
    这些目录都是属于应用的,当应用被卸载的时候,里面的内容都会被移除,但是不要依赖于系统的操作。

    相关文章

      网友评论

        本文标题:Android 文件存储

        本文链接:https://www.haomeiwen.com/subject/kfoulxtx.html