【问题标题】:Android Get Application's 'Home' Data DirectoryAndroid 获取应用程序的“主”数据目录
【发布时间】:2011-06-11 23:33:35
【问题描述】:

一个简单的问题,与应用写入内存时的默认“主”目录有关。默认情况下,创建的任何文件都由操作系统 (2.2) 放置在:

/data/data/your.package/files

读取文件时,使用相同的默认值,通过openFileInput()openFileOutput() 保持适当的上下文。但是如果我需要检查文件是否存在,例如使用 File 类,我需要在构造函数中指定整个路径。

我看到有Environment.getDataDirectory()(返回/data)、Environment.getRootDirectory()(返回/system)等,但与获取应用的“主”目录无关。

这不是什么大不了的事,但如果有某种方式,我宁愿不要将完整路径硬编码到我的应用程序中以供文件使用(比如包名称更改,比如未来操作系统版本中的路径更改)以编程方式引用应用程序的“主”目录。

【问题讨论】:

标签: android android-context home-directory


【解决方案1】:

当然,永远不会失败。在发布上述问题大约一分钟后找到了解决方案......对于可能遇到相同问题的人的解决方案:

ContextWrapper.getFilesDir()

找到here

【讨论】:

  • 这会返回/data/data/<homeAppDir>/files,但是如何在没有这个“文件”的情况下获取路径?
  • @Prizoff 使用 Context.getApplicationInfo().dataDir,根据Kevin's answer below
  • 正确的做法是:context.getApplicationContext().getFilesDir()
  • 引用:“当然,永远不会失败”并不完全正确。他们修复了 Android 4.4 中的一些竞争条件...(请参阅code.google.com/p/android/issues/detail?id=8886
  • 这会在我的 Google Nexus 6 上返回“/data/user/0//files”,这是错误的文件夹。
【解决方案2】:

你可以试试Context.getApplicationInfo().dataDir 如果你想要包的持久数据文件夹。

getFilesDir() 返回 this 的子根。

【讨论】:

  • 这会在我的 Google Nexus 6 上返回“/data/user/0/”,这是错误的文件夹。
【解决方案3】:

获取应用程序包中文件的路径;

ContextWrapper c = new ContextWrapper(this);
Toast.makeText(this, c.getFilesDir().getPath(), Toast.LENGTH_LONG).show();

【讨论】:

    猜你喜欢
    • 2014-05-27
    • 2011-07-28
    • 2019-11-18
    • 1970-01-01
    • 2023-03-10
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多