1.今天遇到一个问题,(修改已经解决)

1.首先看看真机测试下的文件结构


2.简单介绍android文件结构的作用
以下是几个重要目录/文件的说明:

 1、mnt                挂载点目录2、etc                系统主要配置文件3、system            Android 系统文件4、sys                Linux 内核文件5、proc                运行时文件6、init.rc            启动脚本7、default.prop        系统属性配置文件8、data                用户程序目录9、dev                设备文件
 system 目录下面的主要文件目录下面也简单介绍一下:1、usr         用户文件夹,包含共享、键盘布局、时间区域文件等2、app          常规下载的应用程序,这些 apk 包都是受保护的哦3、lib            系统底层库,如平台运行时库等4、etc          系统的配置文件,比如APN接入点设置等核心配置等5、framework    Android 系统平台核心 framework 的文件6、build.prop    Android 系统属性配置文件7、xbin            常用开发工具,比如 tcpdump/sqlite3 等8、bin            系统工具,比如 ps/cp/pm 等可以看到 /data 目录下结构都和应用有关,平时安装的用户应用/游戏程序,对应APP的数据,都被安装在 /data/app 下就可以了。

3.Android4.2的多用户管理中关于SD卡的实现改动

问题
Android4.2中,通过类得到的SD卡路径类似 /storage/emulated/0 在adb shell中看不到,也不能访问.
MediaServer不能访问这样的路径. /storage/emulated/0/
libstagefright中原先可以正常读写的SD卡路径,现在由于以上原因不能用了.
另外: 还有一个权限问题,本文不进行讨论,但它是现实存在的,由于它的存在,导致即使程序中写死实际的挂载点,它也会提示没有权限.

File path = Environment.getExternalStorageDirectory();// 获得SD卡路径
Android得到的真机的SD卡路径是 /storage/emulated/0/但是访问却出错。
看一下文件结构。

红色的是表示这个/storage/emulated/0/路径是个软连接,访问这个目录就是相当于访问/mnt/shell/emulated/0/(这里的0代表是第几个存储卡,手机没有外插的内存卡,就是0,有的话就会多出来一个/storage/emulated/1的文件夹),那么我们去看看/mnt/shell/emulated/0/这个文件夹


可以看到/mnt/shell/emulated/0/这个文件夹下的确放的是手机上的文件,其他的文件都最终指向这里,而且这个文件的权限

 /mnt/                    drwxr-x---/mnt/shell/              drwxrwx---/mnt/shell/emulated/     drwxrwx--x/mnt/shell/emulated/0/   drwxrwx--x

有linux的经验的,应该知道d代表是文件夹后面的3个分为一组 d所有者,所属组,其他人,这里的其他人中都有x权限,可执行权限,这就表示它可以执行某些命令去查寻这个文件夹下有哪些目录及其文件

File path=Environment.getExternalStorageDirectory();
// 获得SD卡路径
File[] files = path.listFiles();// 读取
但是这样却输出为空。本人表示不知道为什么?如果你知道可以评论一下,谢谢

为了兼容以前,同时挂载到 /storage/emulated/legacy (故名思议,传统的),还建立三个软连接 /storage/sdcard0 ,/sdcard,/mnt/sdcard ,都指向 /storage/emulated/legacy

这个0和多用户有什么关系呢,那是因为多用户这个新特性,只在平板上才启用,在手机上会被禁用的。但是底层实现是一致的。 /mnt/shell/emulated 目录和 /storage/emulated 下的文件夹是一样的。(注意,这个/mnt/shell/emulated 不是挂载出来的)
推测,/mnt/shell/ 是为了多用户准备的,因为linux的多用户是基于shell实现的。

网上说:
android是基于linux的,linux里的要使用存储设备就要先把它挂载到到linux的目录树上(以/为根),android上一般是挂载到/storage/emulated/这个目录对应的目录或者/storage对应目录里的,假如你可以放两张内存卡,那些就可能是分别挂载到 /storage/emulated/0/  和/storage/emulated/1/ 这样的目录。。而你得到/storage/emulated/0/是你SD卡的真正目录。。不是引用路径。以前你可能会得到的是/sdcard 这样的路径。那个才是一个链接(你所说的引用),链接到你SD直正的挂载目录/storage/emulated/0 。。所以当你访问两个路径时得到的内容是一样的。

我觉得也对,但是仍然出错。

在Android 4.2版本之前,通过Environment.getExternalStorageDirectory()获取的sdcard默认目录是正常的,可进行读写,一般的结果是“/mnt/sdcard”,但是在4.2版本之后,获取的sdcard目录是“/storage/emulated/0”,使用File.exist()方法返回true表示文件/目录是存在的,但是通过adb向该返回的目录中写数据(上传文件=)是不成功的,返回的错误是"No such file or directory",个人判断是返回的路径“/storage/emulated/0”其实是个类似快捷方式的文件,通过特定的解析方式可以认为是目录,但对于adb来说,该路径就是个文件,adb没有做过多的属性=判断。上述判断也是有依据的,通过adb的shell命令获取指定目录下的文件/文件夹列表, 该路径显示的是文件,且有大小。
google在4.2中考虑多用户的问题,对每个用户(user)来说,看各自的文件夹可以,但对于数据文件夹的处理就稍微麻烦了,所以调整了数据的挂载结构,如使用fuse技术/dev/fuse 会被挂载到/storage/emulated/0 目录,为了兼容以前,同时挂载到 /storage/emulated/legacy (故名思议,传统的),还建立三个软连接 /storage/sdcard0 ,/sdcard,/mnt/sdcard ,都指向 /storage/emulated/legacy/,

之前就有猜测,关于目录结构中会存在不同程度的虚拟链接文件,google了下确实如此,以下的3处虚拟符号链接(类似windows下的快捷方式)是:

"/storage/emulated/0 and /storage/emulated/0/0 (new and "backup" locations, respectively)
/storage/emulated/legacy and /storage/emulated/legacy/0 (new and "backup" locations, respectively)
/storage/sdcard0 and /storage/sdcard0/0 (new and "backup" locations, respectively)"

哎,看了一下午,以解决,先记录下有用的信息。。。

最后发现
(1)先把手机获得root权限,
http://blog.csdn.net/qq_21383435/article/details/51408001
(2)然后修改你要访问的文件夹权限,
(3)最后还要配置读写权限

<!-- 加入在SDCard中创建与删除文件的权限 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><!-- 加入在SDCard中写入数据的权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

android 4.2版本的sdcard文件目录分析相关推荐

  1. 【Android 安全】DEX 加密 ( 不同 Android 版本的 DEX 加载 | Android 8.0 版本 DEX 加载分析 | Android 5.0 版本 DEX 加载分析 )

    文章目录 一.不同版本的 DEX 加载 1.Android 8.0 版本 DEX 加载分析 2.Android 6.0 版本 DEX 加载分析 3.Android 5.0 版本 DEX 加载分析 一. ...

  2. Android 系统(126)---Android的死机、重启问题分析方法

    Android的死机.重启问题分析方法 阅读数:11986 Android的死机.重启问题分析方法 1.     死机现象 1.1      死机定义 当手机长时间无法再被用户控制操作时,我们称为死机 ...

  3. android 4.4 batteryservice 电池电量显示分析

    转载地址:http://blog.csdn.net/daweibalang717/article/details/40615453 最近工作接触到这么的东西,这是我对整个电池管理方面Java 层的分析 ...

  4. Android的死机、重启问题分析方法

    Android的死机.重启问题分析方法 原文链接:https://blog.csdn.net/jinlu7611/article/details/50592385 1.死机现象 1.1 死机定义 当手 ...

  5. android 9patch 漏洞,Android 9patch 图片解析堆溢出漏洞分析(CVE-2015-1532)

    [前言] 日前谷歌公开了一个今年1月份更新的漏洞.这个漏洞修复了一个存在于Android 5.1版本以下图片渲染的问题,可以查看相关链接. 9patch是Android上特有的一种图片格式,就是在普通 ...

  6. android 系统(143)---Android实现App版本自动更新

    Android实现App版本自动更新 现在很多的App中都会有一个检查版本的功能.例如斗鱼TV App的设置界面下: 当我们点击检查更新的时候,就会向服务器发起版本检测的请求.一般的处理方式是:服务器 ...

  7. 关于AndroBench在Android 10以后性能衰减的问题分析

    关于AndroBench在Android 10以后性能衰减的问题分析 背景 自Android 10发布以来,由于Google默认禁用了在Android P时引入的Compatibility WAL,加 ...

  8. Android SDK各个版本API的特性及兼容性(Dalvik/ART)

    Android最新support包v4,v7,v13,v14,v17等 - http://download.csdn.net/download/u012808234/9502763 Android A ...

  9. Android从驱动到应用开发实例分析

    Android从驱动到应用开发实例分析 1. 第一个android应用程序 Android应用一般包含一个源代码目录src.一个资源目录res.一个配置文件AndroidManifest.xml.和一 ...

最新文章

  1. Ejabberd源码解析前奏--配置
  2. 5月Web服务器份额:Microsoft亚军 份额涨1.05%
  3. 较深度地递归转义过滤
  4. std::vectorChannel2* m_allChannels;容器,以及如何根据channelid的意义
  5. Linux:守护进程解析、如何实现守护进程
  6. Office快捷键大全之三(Access快捷键下篇)
  7. 服务器数据库带宽费开票项目,服务器带宽和访问数据库速度
  8. 转化百分比_localPosition与anchoredPosition的转化关系
  9. vim 删除,复制和粘贴
  10. Window 通过cmd查看端口占用、相应进程、杀死进程等的命令
  11. 3月22 关于CSS
  12. pku,杨建武:文本挖掘技术
  13. 一个多道批处理系统中仅有 P1 和 P2 两个作业
  14. 使用 f2py 包装 Fortran MPI 程序
  15. 深度神经网络如何训练,深度神经网络怎么用
  16. VCS(DVE)仿真波形的存储和打开.vpd
  17. 在公交车上想出的一个java算法
  18. C语言:从键盘输入一个整数,分别输出它的个位数、十位数、百位数.....
  19. 基于SVM算法的人脸表情识别
  20. Java故事之路在脚下

热门文章

  1. 愚人节谁最皮?华为宣布攻克兽语,小米6复刻版官宣,微信发万元红包...
  2. “携号转网”正式试运行,这两个原因或致无法转网
  3. 王思聪、贾跃亭、罗永浩组成神奇的三角债?罗永浩回应...
  4. 华为Mate30 5G评测:首款5G爆品, 一步到位兼容5G双模全网通
  5. “萝莉变大妈”事件系主播策划!斗鱼出拳:永久封停!
  6. 别人家的年终奖!这公司逆势上调年终奖 员工最多可拿到20薪
  7. 江苏一女子给程序员老公买假发,看到其后脑勺后,网友们哭笑不得
  8. 初次接触 Lottie
  9. 关于浏览器的那些事情1【面试】
  10. 源码解析之HashMap实现原理