Android 文件夹简单介绍

来源:互联网 发布:行尸走肉网络剧仓库 编辑:程序博客网 时间:2024/06/05 17:58

  • Android 文件夹简单介绍
    • android 文件夹的组成
    • android 应用内部存储
    • android拓展存储
    • android sd卡

Android 文件夹简单介绍

现在有很多的android开发人员对android文件的使用还不规范,要么把所有的东西都存在SD卡上,要不就把所有的东西都存在应用内部存储里.甚至有许多的开发人员连这么目录的含义是什么都不了解.这里就简单介绍一下android的文件夹使用.也只是个人的一些理解,用做抛砖引玉.

android 文件夹的组成

android里文件夹是分为三个种类的.

  • 应用内部存储—–随应用卸载删除
  • 应用拓展存储—–位于SD卡,随应用卸载删除
  • android sd卡—–用于存储公有文件,不随应用卸载删除

下面就来详细介绍以下向个文件夹.

android 应用内部存储

应用内存储位于/data/data/package_name/文件夹下,如我应用的包名是 com.android.dir.demo,则此用的应用内存储就位于/data/data/com.android.dir.demo/下.此文件夹除非root,否则只有自己可访问.用于存储一些私密的信息.如用户信息等.会随者应用卸载而删除.

一般这里面会包含有几个文件files ,lib,cache等,详细介绍如下

路径名 作用 lib 用由存放so动态库 cache 用于存放缓存数据 files 用于存放应用产生的文件,如日志等 shared_prefs 存放 SharedPreferences生成的文件,注意:如模式设置错误,则可能被其它应用读取 datbases 存放数据库文件,一系统自动创建

这里一般我们会使用到的文件夹只有cache和files,其它都是用系统自动创建的,或取其对应的File对象方式为

//获取到files的文件对象File filesDir = context.getFilesDir();//获取到cache的文件对象File cacheDir = context.getCacheDir();

android拓展存储

目录位于SdCard/Android/data/package_name/下,这个是google为会规范app对SD卡的使用推出的,以前在app如果需要在SD卡上存一个文件,一般都会在SD卡的根目录下建一个.package_name文件隐藏文件,但是这样做的坏处就是如果应用被卸载,这里的数据就会变成垃圾数据.但是如果应用把文件放在拓展存储下的话,就是随着应用的卸载而被清理掉.不会形成垃圾数据.而且这样做还有一个好处,那就是在SDK>=19时,是可以不用申请SD卡读写权限的.

但是这里也存在一个问题,那就是这里的目录是可以被任意应用访问的,所以这里适合一存储一此不敏感的数据,比如图片的缓存,一些音视频文件等.

具体的调用方法如下

File file2 = context.getExternalFilesDir(null);File cache = context.getExternalCacheDir();

调用以上方法,/Android/data/{package_name}/files/和/Android/data/{package_name}/cache/就会自动的被创建成功.

android sd卡

现在Google官方已以不建议应用直接在SD卡上创建文件了,所以除非必要,还是要把文件创建在这里.除了可能会产生垃圾数据这一点之外,还有一个问题,就是往SD卡了写文件,是需要申请权限的.如果用户拒绝了,那app就不能在SD卡上写文件了,同时由于拓展存储也是位于SD卡上,如果用户关闭了SD的读写权限,那就会造成拓展存储也无法使用.

如果需要使用SD卡,则需要事先申请权限

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

使用是需要判断是否拥有SD卡,

public File getSDPath(){        File sdDir = null;        boolean sdCardExist = Environment.getExternalStorageState()          .equals(android.os.Environment.MEDIA_MOUNTED);//判断sd卡是否存在       if(sdCardExist)          {                                        sdDir = Environment.getExternalStorageDirectory();//获取跟目录      }          return sdDir; }
0 0