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

文件管理不能访问data(访问不了data文件夹)本文参考自 CSDN 文档 最近在看 第一行代码 第二版 中关于数据存储方案的介绍 数据的状态分为两种 瞬时状态和持久状态 一般保存在内存中的数据随着活动的关闭 数据也就销毁了 如果我们想保存这些数据 该怎么办呢 书中介绍了三种实现数据持久化的方法 分别是 文件存储 SharedPrefer 存储以及数据库存储 在学习第一种数据持久化方法文件存储的时候 我们通过 Context

大家好,我是讯享网,很高兴认识大家。



本文参考自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 中显示出来,不然还是会出现各种奇奇怪怪的错误的!

小讯
上一篇 2025-05-21 21:15
下一篇 2025-06-03 10:34

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/165231.html