android 存储方式以及路径简介

来源:互联网 发布:linux 用户目录权限 编辑:程序博客网 时间:2024/06/05 16:06

存储分成了内部存储和外部存储。注意内部存储又叫做机身内存,而且内存又包含了两个部分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文件并写入了数据:

                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/包名/files
  • 1

2.getApplicationContext().getCacheDir().getPath() 
取得应用程序的缓存文件在内部存储上的存储路径

/data/data/包名/cache
  • 1

3.getApplicationContext().getExternalCacheDir().getAbsolutePath()和getApplicationContext().getExternalCacheDir().getCanonicalPath() 
取得应用程序的缓存文件在外部存储上的存储路径

/storage/sdcard/Android/data/包名/cache
  • 1

4.getApplicationContext().getObbDir().getAbsolutePath() 
取得外部存储obb目录的根路径

/storage/sdcard/Android/obb/包名
  • 1

5.Environment.getExternalStorageState() 
得到外部存储卡(sdcard)的存储状态

mounted
  • 1

6.Environment.getExternalStorageDirectory().getAbsolutePath() 
得到外部存储的整个根路径

/storage/sdcard
  • 1

7.Environment.getDownloadCacheDirectory().getAbsolutePath() 
得到外部存储的下载文件的缓存路径

/cache
  • 1

8.Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath() 
得到外部存储的图片的根路径

/storage/sdcard/Pictures
  • 1

9.Environment.getRootDirectory().getAbsolutePath()

/system
  • 1

10.Environment.getDataDirectory().getAbsolutePath()

/data
  • 1

最后总结一下: 
内部数据:/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)清除;

原创粉丝点击