android 存储方式以及路径简介
2017-12-12 11:07
99 查看
存储分成了内部存储和外部存储。注意内部存储又叫做机身内存,而且内存又包含了两个部分RAM(运行时内存,这个和运行速度有关系,是手机运行时存储数据和指令的地方)、ROM(这个才算是真正存储东西的内部存储范围,是应用配置和其他数据的地方);而外部存储就很明确了,用户的外部挂载存储设备,如SD卡,手机的内部存储卡。来介绍几个概念:(一) 内存:全称内部存储,英文名(InternalStorage)。当我们在打开DDMS下的File Explorer面板的时候,/data目录就是所谓的内部存储 (ROM )。
但是注意,当手机没有root的时候不能打开此文件夹。 /data/data目录(存储包私有数据)。此目录下将每一个APP的存储内容按照包名分类存放好。 比如:
1.data/data/包名/shared_prefs 存放该APP内的SP信息
2.data/data/包名/databases 存放该APP的数据库信息
3.data/data/包名/files 将APP的文件信息存放在files文件夹
4.data/data/包名/cache 存放的是APP的缓存信息
……
多扯一句,下面的代码就会在files文件夹先创建一个hello_file文件并写入了数据:
2
3
4
5
(二)
外存:
/storage/sdcard/Android/data目录或者说/storage/emulated/0/Android/data包目录属于外部存储。比如我们的内部存储卡。
注意,Google官方建议开发者将App的数据存储在私有目录即/storage/emulated/0/Android/data包下,这样卸载App时数据会随之被系统清除,不会造成数据残留。
(三)
其次介绍几个除了/data目录之外的目录
1. /mnt :这个目录专门用来当作挂载点(MountPoint)。通俗点说,/mnt就是来挂载外部存储设备的(如sdcard),我们的sdcard将会被手机系统视作一个文件夹,这个文件夹将会被系统嵌入到收集系统的mnt目录
2. /dev包:Linux系统的常规文件夹。
3. /system包:系统配置的文件夹,比如Android系统框架(framework)、底层类库(lib)、字体(font)等。
……下面说一下路径API和对以上的文件的操作:
1.getApplicationContext().getFilesDir().getAbsolutePath(); 和getApplicationContext().getFilesDir().getPath()
上面的两个API都是得到应用程序私有目录下的文件路径:
2.getApplicationContext().getCacheDir().getPath()
取得应用程序的缓存文件在内部存储上的存储路径
3.getApplicationContext().getExternalCacheDir().getAbsolutePath()和getApplicationContext().getExternalCacheDir().getCanonicalPath()
取得应用程序的缓存文件在外部存储上的存储路径
4.getApplicationContext().getObbDir().getAbsolutePath()
取得外部存储obb目录的根路径
5.Environment.getExternalStorageState()
得到外部存储卡(sdcard)的存储状态
6.Environment.getExternalStorageDirectory().getAbsolutePath()
得到外部存储的整个根路径
7.Environment.getDownloadCacheDirectory().getAbsolutePath()
得到外部存储的下载文件的缓存路径
8.Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath()
得到外部存储的图片的根路径
9.Environment.getRootDirectory().getAbsolutePath()
10.Environment.getDataDirectory().getAbsolutePath()
最后总结一下:
内部数据:/data/data/包名/XXX
外部私有数据:/storage/emulated/0/Android/data/包名/XXX
外部公有数据:/storage/emulated/0/包名/XXX当用应用管理来清除数据的时候:
清除缓存:将外部私有数据下的cache包(/storage/emulated/0/Android/data/包名/cache)清除,将内部数据下的cache包下的内容(/data/data/包名/cache/XXX)清除 。
清楚数据:将外部私有数据包(/storage/emulated/0/Android/data/包名)清除,将内部数据下的所有内容(/data/data/包名/XXX)清除;
但是注意,当手机没有root的时候不能打开此文件夹。 /data/data目录(存储包私有数据)。此目录下将每一个APP的存储内容按照包名分类存放好。 比如:
1.data/data/包名/shared_prefs 存放该APP内的SP信息
2.data/data/包名/databases 存放该APP的数据库信息
3.data/data/包名/files 将APP的文件信息存放在files文件夹
4.data/data/包名/cache 存放的是APP的缓存信息
……
多扯一句,下面的代码就会在files文件夹先创建一个hello_file文件并写入了数据:
String FILENAME = "hello_file"; String string = "hello world!"; FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_APPEND|Context.MODE_WORLD_READABLE); fos.write(string.getBytes()); fos.close();1
2
3
4
5
(二)
外存:
/storage/sdcard/Android/data目录或者说/storage/emulated/0/Android/data包目录属于外部存储。比如我们的内部存储卡。
注意,Google官方建议开发者将App的数据存储在私有目录即/storage/emulated/0/Android/data包下,这样卸载App时数据会随之被系统清除,不会造成数据残留。
(三)
其次介绍几个除了/data目录之外的目录
1. /mnt :这个目录专门用来当作挂载点(MountPoint)。通俗点说,/mnt就是来挂载外部存储设备的(如sdcard),我们的sdcard将会被手机系统视作一个文件夹,这个文件夹将会被系统嵌入到收集系统的mnt目录
2. /dev包:Linux系统的常规文件夹。
3. /system包:系统配置的文件夹,比如Android系统框架(framework)、底层类库(lib)、字体(font)等。
……下面说一下路径API和对以上的文件的操作:
1.getApplicationContext().getFilesDir().getAbsolutePath(); 和getApplicationContext().getFilesDir().getPath()
上面的两个API都是得到应用程序私有目录下的文件路径:
/data/data/包名/files1
2.getApplicationContext().getCacheDir().getPath()
取得应用程序的缓存文件在内部存储上的存储路径
/data/data/包名/cache1
3.getApplicationContext().getExternalCacheDir().getAbsolutePath()和getApplicationContext().getExternalCacheDir().getCanonicalPath()
取得应用程序的缓存文件在外部存储上的存储路径
/storage/sdcard/Android/data/包名/cache1
4.getApplicationContext().getObbDir().getAbsolutePath()
取得外部存储obb目录的根路径
/storage/sdcard/Android/obb/包名1
5.Environment.getExternalStorageState()
得到外部存储卡(sdcard)的存储状态
mounted1
6.Environment.getExternalStorageDirectory().getAbsolutePath()
得到外部存储的整个根路径
/storage/sdcard1
7.Environment.getDownloadCacheDirectory().getAbsolutePath()
得到外部存储的下载文件的缓存路径
/cache1
8.Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath()
得到外部存储的图片的根路径
/storage/sdcard/Pictures1
9.Environment.getRootDirectory().getAbsolutePath()
/system1
10.Environment.getDataDirectory().getAbsolutePath()
/data1
最后总结一下:
内部数据:/data/data/包名/XXX
外部私有数据:/storage/emulated/0/Android/data/包名/XXX
外部公有数据:/storage/emulated/0/包名/XXX当用应用管理来清除数据的时候:
清除缓存:将外部私有数据下的cache包(/storage/emulated/0/Android/data/包名/cache)清除,将内部数据下的cache包下的内容(/data/data/包名/cache/XXX)清除 。
清楚数据:将外部私有数据包(/storage/emulated/0/Android/data/包名)清除,将内部数据下的所有内容(/data/data/包名/XXX)清除;
相关文章推荐
- 浅析Android存储方式以及路径API
- Android获取内置、外置以及OTG等方式挂载的存储设备路径
- Android开发获取多个存储空间的路径(内置SD卡以及外置SD卡)
- android--关于内部存储、外部存储以及存储路径
- 从零学Android(十三)、Android中的数据存储方式简介
- android存储方式(SharePreference,内部存储以及外部存储)的个人理解
- Android数据的四种存储方式(1)SharedPreferences、SQLite、Content Provider和File 简介
- Android 存储空间简介及不同存储路径获取
- 获取手机内置存储和外挂sdcard存储路径和可用空间以及总空间大小的方式
- android的基础学习:SQLite存储方式以及数据库操作
- 浅谈android获取存储目录(路径)的几种方式和注意事项
- 彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑
- Android的资源类型和存储方式简介-android学习之旅(五十二)
- Android的资源类型和存储方式简介-android学习之旅(五十二)
- android文件存储的五种方式简介
- 【android路径写法以及存储】
- Android的资源类型和存储方式简介-android学习之旅(五十二)
- android获取存储目录(路径)的几种方式和注意事项
- Android 默认AP名字,以及AP名字存储路径
- android6.0通过反射获取USB和U盘以及内部存储路径,区分USB和U盘路径