Android

时间:2017-02-24 09:49:09

标签: java android caching android-file

在我的应用中,我将临时文件保存到我的应用缓存文件夹中。我通过这种方法获取缓存目录的名称:

context.getCacheDir();

它给我这样的路径: /data/user/0/my.app.packagename 但后来当我试图通过这种方法获取我的缓存文件的父目录的名称 - file.getParent(); 我得到的缓存目录路径完全不同,在我的情况下这个: /data/data/my.app-packagename

所以我只是想知道为什么会这样,为什么getParent()没有返回与context.getCacheDir()相同的路径?

2 个答案:

答案 0 :(得分:3)

行为是正确的,技术上是相同的。 如果您通过adb shell连接到您的Android设备并进入/ data / user /并运行' ll'命令您将看到文件夹0只是/ data / data /的符号链接。

root@android:/data/user # ll
lrwxrwxrwx root     root              1970-01-01 01:00 0 -> /data/data/

如果您不知道这意味着什么,请阅读symbolic links

所以没有问题,你可以相信它们是相同的。

答案 1 :(得分:0)

这种行为今天让我很困惑。 这是我的50美分,可以为您带来启发:

  1. 我已经使用Android 8.1启动了模拟器
  2. 我已经通过USB连接了Android 9设备

此后,我启动了Android-Studio并打开了设备文件资源管理器

现在发生了奇怪的事情:

  • 在Android 8.1上,您看到的结构为 /data/user/0/com.myApp /
  • 在Android 9上,没有目录/ data / user(也没有通过android-studio可见的符号链接)

,内部路径似乎相同(即使android studio中没有可见的符号链接)。

我使用RNFetchBlob(反应本机包读取文件),如果我从RNFetchBlob.fs.dirs.CacheDir输出结果,则结果为 / data / user / 0 /....在Android 9上,此目录不存在。 但是我尝试了一下,并使用以下命令输出将在此目录中找到的所有文件:

RNFetchBlob.fs.ls(RNFetchBlob.fs.dirs.CacheDir)
    .then((files) => {
      console.log("output-files",files);
    })

...发现此文件输出了我之前缓存的所有文件。

如果有人知道一些文档,为什么Android 9会出现这种现象,请对此进行评论并指出。