手机存储

手机分为内部存储和外部存储

1、内部存储

主要方法 路径
Environment.getDataDirectory() /data
Environment.getDownloadCacheDirectory() /cache
Environment.getRootDirectory() /system

这里的内部存储对应的就是手机QQ的手机内存,路径为

Environment.getDataDirectory().getParentFile()

就是根目录,这个目录下还有一些私密的数据,比如:databases(数据库)、shared_prefs(SharedPreferences)等

注:没有root的手机不能打开该文件夹

2、外部存储

外部存储又分为SD卡和扩展卡内存

(1)SD卡

获取路径方式是

Environment.getExternalStorageDirectory() /storage/sdcard0
方法 路径
Environment.getExternalStoragePublicDirectory(DIRECTORY_ALARMS) /storage/sdcard0/Alarms
Environment.getExternalStoragePublicDirectory(DIRECTORY_DCIM) /storage/sdcard0/DCIM
Environment.getExternalStoragePublicDirectory(DIRECTORY_DOWNLOADS) /storage/sdcard0/Download
Environment.getExternalStoragePublicDirectory(DIRECTORY_MOVIES) /storage/sdcard0/Movies
Environment.getExternalStoragePublicDirectory(DIRECTORY_MUSIC) /storage/sdcard0/Music
Environment.getExternalStoragePublicDirectory(DIRECTORY_NOTIFICATIONS) /storage/sdcard0/Notifications
Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES) /storage/sdcard0/Pictures
Environment.getExternalStoragePublicDirectory(DIRECTORY_PODCASTS) /storage/sdcard0/Podcasts
Environment.getExternalStoragePublicDirectory(DIRECTORY_RINGTONES) /storage/sdcard0/Ringtones

上面的九个方法对应的就是SD卡的九大公有目录,Google官方建议我们数据应该存储在私有目录下,不建议存储在公有目录下或其他地方

那什么是私有目录呢?
就是在外部存储的App的包名下,如:

/storage/emulated/0/Android/data/cwj.test(包名)/files/test
方法 路径
getExternalFilesDir() /storage/emulated/0/Android/data/cwj.test(包名)/files/test
getExternalCacheDir /storage/emulated/0/Android/data/cwj.test(包名)/cache/test

一般情况下有包名的路径我们都是调用Context中的方法来获得,没有包名的路径,我们直接调用Environment中的方法获得。

(2)扩展卡内存

扩展内存就是我们插入的外置SD卡,获取扩展内存的路径有点难度,不过Google很牛逼,哈哈,代码如下:

private static String getExtendedMemoryPath(Context mContext) {  StorageManager mStorageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);Class<?> storageVolumeClazz = null;try {storageVolumeClazz = Class.forName("android.os.storage.StorageVolume");Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList");Method getPath = storageVolumeClazz.getMethod("getPath");Method isRemovable = storageVolumeClazz.getMethod("isRemovable");Object result = getVolumeList.invoke(mStorageManager);final int length = Array.getLength(result);for (int i = 0; i < length; i++) {Object storageVolumeElement = Array.get(result, i);String path = (String) getPath.invoke(storageVolumeElement);boolean removable = (Boolean) isRemovable.invoke(storageVolumeElement);if (removable) {return path;}}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return null;
}

该方法主要是通过反射的方式使用在sdk中被 隐藏 的类 StroageVolume 中的方法getVolumeList(),获取外部存储的路径。

路径测试:

Log.e("cwj", "外置SD卡路径 = " + getStoragePath(this));
Log.e("cwj", "内置SD卡路径 = " + Environment.getExternalStorageDirectory().getAbsolutePath());
Log.e("cwj", "手机内存根目录路径  = " + Environment.getDataDirectory().getParentFile().getAbsolutePath());

image.png

Android手机存储路径相关推荐

  1. android手机 存储路径设置在哪里找,Android 存储路径选择方法

    Android能用来存储的地方有两个,一个是手机内置的存储空间,一个是外置的SD卡,内置的存储空间一般比较小,所以应用的缓存建议存储在外置的SD卡中. 在Android系统中如何获得存储的路径呢? p ...

  2. Android 手机存储及路径

    目录 Android手机存储分类 二,内部存储 三,外部存储 私有目录 公有目录 四,数据删除 五,权限相关 android手机存储分类 分为:内部存储和外部存储 如何区分内部存储和外部存储:可以从物 ...

  3. android 各个存储路径及获取方法总结

    1.各个路径 最长用到的就这三个位置 /data/data/包名/ /sdcard/Android/data/包名/ /sdcard/xxx 前两个是应用内部存储, 会随着app的卸载而自动删除, s ...

  4. Android 手机存储相关内容

    应用操作的文件存储位置分为三个部分: 1.应用内部存储私有文件目录 2.应用外部存储私有文件目录 3.公有目录 Android手机存储分为两个部分:内部存储和外部存储,内部存储一般是手机自带的存储空间 ...

  5. 安卓android获取存储路径,Android系统的手机文件夹目录详解

    一.文件夹 1./acct/ 系统回收站,删除的系统文件. 2./cache/ 缓存 3./data/ 用户的所有程序相关数据 app/ 所有用户安装的apk文件 app-private/ data/ ...

  6. android app根目录下cache,Android 手机存储目录详解

    一.手机存储 (一)内置私有存储,手机需root后才能看到 获取路径的方法 1.getFilesDir() /data/data/[packagename]/files 文件缓存目录,一般存小的文件缓 ...

  7. android 本地存储路径,Android本地存储路径学习

    一.前言: Android 中获取本地储存路径,有四个方法, getCacheDir().getFilesDir().getExternalFilesDir().getExternalCacheDir ...

  8. Android 手机存储 --------内存/外存/缓冲

    每日一言:当下的付出,是明日的花卉. Android 存储路径 Log.d("内置SD卡路径:指定图片保存的路径",Environment.getExternalStorageDi ...

  9. android 手机存储 目录,android 62 手机存储目录的划分

    android下应用程序的路径和javase不同,应用程序的数据要保存自己的文件夹里面 > > getFileDir(); 获取自己的文件夹 /data/data/包名(应用程序的名字)/ ...

最新文章

  1. mysql/mariadb centos7 修改root用户密码及配置参数
  2. Spring基础专题——第十一章(高级注解编程完结)
  3. HDU 3398 String
  4. Tiles Framework
  5. 微软官方的.NET Framework API 参考网址
  6. DIV+CSS布局,第五课,DOCTYPE的选择,零起点细说网站制作
  7. 字节 字符 utf-8 unicode 以及提交表单验证字符长度 .......
  8. 6个web前端核心技术,你学到哪个了呢?
  9. 难过的时候看一看 再坏能有多坏!
  10. 【参数辨识】六关节机械臂动力学参数辨识(上)
  11. 开放 接口 饿了么_饿了么口碑启动生态赋能计划 将在210城开放智慧餐厅业务合作窗口...
  12. 递归 非递归 遍历二叉树
  13. 人工智能究竟能否实现?
  14. 通信设计院,到底是干啥的?
  15. 【心理咨询师考试笔记】基础理论(六)——心理咨询概论
  16. 小明身高180cm,小刚身高165cm,计算两人的身高差
  17. pymysql 插入错误:Warning(1265, “Data truncated for column ‘XXXX‘ at row xxx“)
  18. stm32直流电机PID控制hal库(Cubemx)
  19. 美通社日历 | 会展及重要事件信息、企业财报发布,节假日备忘(3月22日—3月28日)...
  20. 你的网站为什么被黑?

热门文章

  1. 10.5日饿了么复活了,大家凑合用用吧~(偶尔更新~)
  2. 中山大学农学院袁超磊课题组博士后招聘
  3. 物体识别桌 开发系列之一
  4. 基于FFMPEG的封装格式转换器
  5. 计蒜客——恋爱纪念日(学习如何格式化打印日期)
  6. java中求某个时间跳过节假日和周末
  7. Tableau-热力图
  8. 不要一个人吃饭---人脉就是钱脉
  9. 【软件网每日新闻播报│第9-22期】
  10. mysql出现2058_解决yog连接mysql出现2058的问题