【问题标题】:Android File.mkdirs changes Context.getFilesDirAndroid File.mkdirs 更改 Context.getFilesDir
【发布时间】:2019-11-17 00:25:54
【问题描述】:

这是一个安卓问题。调用 File.mkdirs 可以更改 Context.getFilesDir 的值。因为我没有调查所有的测试用例,所以我用这种方式陈述了这个问题。我对这个结果感到非常惊讶,并进行了一个简单的测试来确认这种行为。

String filesDir = context.getFilesDir().getAbsolutePath();
File newFile = new File(context.getFilesDir,"xxx/MyFile.txt");
newFile.getParentFile().mkdirs();
String newFilesDir = context.getFilesDir().getAbsolutePath();

您会看到 filesDir 和 newFilesDir 不一样。对 mkdirs 的调用改变了位置。我对这个结果感到惊讶,因为 Android 文档没有提到这种行为。那里的任何人都对为什么会发生这种情况以及如何处理它有一些有效的解释。我一直使用 getFilesDir 作为存储内容的地方,我喜欢在目录树中组织这些内容,看起来您不应该在 filesDir 中添加目录。

【问题讨论】:

  • 在您的应用程序目录中创建一个子目录非常好。你能显示更多的代码吗?
  • 我对此感到很傻。我完全误解了我所看到的。在调试会话中,我查看了 context.getFilesDir() 的值并展开了第二行文件。我没有意识到这是一个包含在 getFilesDir() 中的文件(实际上是我刚刚添加的目录)。愚蠢的我没有认识到这一点。但是,如果每次创建 File 时,它​​确实让我稍微思考一下 File 的效率,同时还要实例化其中包含的每个文件/目录的 File 实例!
  • 我刚刚查看了 File 的 java 源代码。他们没有实例化文件中包含的每个文件的实例。所以这意味着调试窗口这样做是为了方便。这是唯一有意义的事情。我的印象是,当您在调试器窗口中查看对象实例时,您实际上只看到了对象中包含的内容。显然,可以添加一些其他便利来查看/调试每个类的对象实例。对于文件,调试视图增加了导航到它包含的文件的便利。

标签: android file mkdirs


【解决方案1】:

通过getFilesDir()mkdirs() 命令在您的应用程序目录中创建一个子目录是非常好的。在这里了解更多:https://developer.android.com/training/data-storage/files

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多