当前位置:网站首页 > 产品管理 > 正文

文件管理不能访问data(访问不了data文件夹)



本文参考自CSDN文档《》

最近在看《第一行代码》(第二版)中关于数据存储方案的介绍。数据的状态分为两种:瞬时状态和持久状态,一般保存在内存中的数据随着活动的关闭,数据也就销毁了,如果我们想保存这些数据,该怎么办呢?书中介绍了三种实现数据持久化的方法,分别是:文件存储,SharedPreference 存储以及数据库存储。

在学习第一种数据持久化方法文件存储的时候,我们通过 Context 类中的 openFileOutput() 方法创建一个指定了保存路径的 FileOutputStream 对象 out,然后用这个 out 对象去创建一个 OutputStreamWriter 对象,之后再用这个 OutputStreamWriter 对象创建一个 BufferedWriter 对象 writer,我们就是通过这个 writer 的 write() 方法向文件输出流写入我们想要保存的数据的。文件写入数据之后默认保存在 /data/data/(package name)/files 目录下。我们可以通过 Android Studio 中的 Android Device Monitor 去查看,Android Device Monitor 的打开方法如下所示。

打开 Android Device Monitor

openFileOutput() 方法生成的文件存放在一个默认路径,即 /data/data/(package name)/files 下,

于是,下一步当然是打开这个路径了,找到 data,点击,没反应,再点击,还是没反应。又遇到问题了,我无法访问 data 目录,通过 Google 搜索可以知道了 File Explorer 中的每个文件和文件夹都是有访问权限的,如下图红框中标识的就是 data 文件夹的访问权限。

访问权限是 drwxrwx--x,这玩意是什么意思呢?我相信,学过 Linux 的同学肯定一眼就知道这是什么意思。这一个字符串一共有 10 个字符,第一个字符表示是文件夹还是目录,如果第 1 个字符是 d,则表示是文件夹。后面 9 个字符可以分为三组,第一组 rwx 表示所有者(user)对文件的访问权限,r 表示可读(read),w 表示可写(write),x 表示可被执行,- 表示没有该权限;第二组 rwx 表示组群(group)对文件的访问权限;第三组 --x 表示其他人(other)对文件的访问权限,可以看到,没有 r 和 w,说明 data 对其他人来说是不可读不可写的,怪不得我们不能打开它呢,那怎么办呢?于是我又网上搜啊搜,发现可以通过一定的方法修改文件的访问权限的,对,这个方法就是 adb shell。

adb shell 是 Android SDK 中的一个工具,你可以在你的 Android SDK 目录下的 platform-tools 找到它,下图就是我电脑上的该目录:

adb 所在目录

我们需要将这个目录添加到环境变量,为的是后面在命令行直接调用 adb 中的命令。比如在此我将  D:AndroidSDKplatform-tools  添加到环境变量(具体怎么添加可以看百度教程——)。随后可以根据参考文档进行操作便可以了。

这里主要说一下几个问题:
1.如图,adb版本不匹配:

从报错的原因来看应该是版本不一致导致的,大概的意思是说你现在的adb版本是39,但是你client端的却是36.

总是就是版本不对了不能好好玩耍了,于是我凭借一句关键词“adb工具包官方下载”在百度上翻越山河大海(唉查阅了好多论文和博客,花费了太多时间了,沧桑啊。。。)意识到我们的adb应该要换个版本了!!!

皇天不负有心人终于让我在的论坛中找到了,这里感谢联想大大了~

下载之后,选中压缩包中的如图的四个文件,覆盖在自己本地的platf-tools目录上对应的文件,在此运行,就没毛病了。。。

没毛病了,感动。。。

2.关于访问/data/data/..的权限问题,其实如果没有特定的必要的话,可以通过genymotion平台,使用版本在Android6.0以下的手机,即可规避各种权限问题(adb shell直接为root,同时也可直接访问/data/data/.. 路径!!!无须前面各种繁琐的操作了):

可见CSDN某

一开始采用的Android Studio安卓模拟器的版本是根据所学习的教程推荐的Android 7.0。

但是,Android 7.0的模拟器是没有root权限的!

所以只需要重新安装一个非Android 7.0版本的模拟器(可以通过genymotion平台,使用版本在Android6.0以下的手机),如Android 6.0,或者连接一台获得了root权限的安卓设备

运行后会发现,当进入adb shell后,命令提示符里前缀就已经变成了:

root@generic_x86:/ #

带有root权限的adb shell

那也就不需要su命令了,可以直接访问所有的文件,问题就解决了。

需要注意的是:
我们要
先打开Android Device Monitor,随后再打开Genymotion的模拟器
那样模拟器的相关信息才会在Android Device Monitor 中显示出来,不然还是会出现各种奇奇怪怪的错误的!
到此这篇文件管理不能访问data(访问不了data文件夹)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 产品经理的入门书籍(产品经理相关书籍推荐)2025-08-03 15:27:07
  • data文件访问受限(文件管理data访问限制)2025-08-03 15:27:07
  • 文件管理安装包(文件管理安装包文件怎么找)2025-08-03 15:27:07
  • 产品经理入门难吗(产品经理难度)2025-08-03 15:27:07
  • 任务管理器在哪里打开(任务管理器在哪里打开win7)2025-08-03 15:27:07
  • 怎么打开任务管理器快捷键win10(苹果电脑怎么打开任务管理器快捷键)2025-08-03 15:27:07
  • 任务管理器快捷打开键(任务管理器的快捷按键)2025-08-03 15:27:07
  • 工具类产品举例3个(工具类产品特点)2025-08-03 15:27:07
  • 产品经理技能证书(产品经理 考证)2025-08-03 15:27:07
  • 产品经理难度(产品经理难度大不大)2025-08-03 15:27:07
  • 全屏图片