Android 文件目录繁多,每个目录都有每个目录存在的意义,将文件存储在正确的目录,有利于文件的分类管理。
Android磁盘存储可以分为两大类,内部存储和外部存储。
内部存储
内部存储不是内存,是位于位于系统磁盘中一个独特的位置。/data/ 文件夹就是内部存储,内部存储中一般存储一些应用的数据,如apk,shareprefence、database数据,webview缓存和图片缓存等。内部存储中还有一个文件夹每个应用都只有一个,里面中数据在应用卸载之后,就会被删除。结构如:/data/data/你的应用的包名/。其次还有一个 /data/app/ 的文件夹,这里面存储着我们手机上安装的apk文件。
特点
- 内部存储的文件和目录只能被我们的app自己所访问,别的app不能访问。
- 内部存储中的私有目录,当用户卸载app之后,改文件目录中关于该应用的信息就会被删除。
- 内部存储是可用的。
- 内部存储大小有限,不适合存储大量数据。
- 只有root的手机,才能从手机文件管理器看见,否则都是隐藏着的。
getCacheDir().getAbsolutePath();///data/data/包名/cache
常见的内部存储中有这些目录
- /data/app/
- /data/data/包名/shared_prefs
- /data/data/包名/cache
- /data/data/包名/databases
- /data/data/包名/files
外部存储
外部存储并不是指拓展的SD卡,不管有无外接设备,每个Android手机都有外部存储。一般的mnt或者storage目录。外部存储中分两类目录,私有目录和公有目录,私有目录的数据会随着应用的卸载而删除,公有目录则不会。
特点
- 公有目录任何程序都可以访问,私有目录自身可以访问。
- 并不一定是可用的,因为SD卡会被挂载。
- 外部存储中的私有目录中的数据会随着应用的卸载而删除,公有目录则不会。
公有目录
公有目录是任何程序都可以
- DIRECTORY_MUSIC
音乐/storage/emulated/0/Music
- DIRECTORY_PODCASTS
播客/storage/emulated/0/Podcasts
- DIRECTORY_RINGTONES
来点铃声
- DIRECTORY_ALARMS
闹钟/storage/emulated/0/Alarms
- DIRECTORY_NOTIFICATIONS
通知/storage/emulated/0/Notifications
- DIRECTORY_PICTURES
图片/storage/emulated/0/Pictures
- DIRECTORY_MOVIES
电影/storage/emulated/0/Movies
- DIRECTORY_DOWNLOADS
下载文件存储路径/storage/emulated/0/Download
- DIRECTORY_DCIM
媒体文件/storage/emulated/0/DCIM
- DIRECTORY_DOCUMENTS
文档/storage/emulated/0/Documents
我们通过Environment.getExternalStoragePublicDirectory()来获取这些目录
私有目录
外部存储中的私有目录是不会自动创建的,需要开发者自己创建,私有目录应用本身无需申请动态权限,就能直接访问。我们可以在私有目录下新建我们自己的文件夹
- getExternalFilesDir("files目录的子目录名称")
获取应用私有目录files目录中的文件目录(/storage/emulated/0/Android/data/包名/files/子目录)
- getExternalCacheDir()
获取应用cache目录(/storage/emulated/0/Android/data/包名/cache)