【问题标题】:Environment.getExternalStorageDirectory().getAbsolutePath() gives a different path - AndroidEnvironment.getExternalStorageDirectory().getAbsolutePath() 给出了不同的路径 - Android
【发布时间】:2013-06-20 13:52:52
【问题描述】:

我尝试在手机内存中写入一些东西。

起初,我将路径硬编码为:

myFile = new File("/sdcard/" + txtName.getText() + ".txt");

这完全没问题。

然后,eclipse 给了我一个警告,说我不应该像那样硬编码路径,我应该执行以下操作:

myFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/"+ txtName.getText() + ".txt");

然后我遵循更正建议并避免警告。

但是,我在编写器类上遇到了运行时异常。

然后,我打印出Environment.getExternalStorageDirectory().getAbsolutePath() 用于调试目的。结果是

/storage/sdcard0

。但是以前工作得很好的硬编码实际上是

/sdcard

.

为什么会这样?

如果我希望避免该警告,如何以更“正式和正确”的方式获取路径目录,而不是硬编码路径?

P.S.:我的手机是 HTC One X,没有外置 SD 卡槽。我猜32GB的存储是内置SD卡的,所以本质应该是一样的。

【问题讨论】:

标签: android android-sdcard


【解决方案1】:

为什么会这样?

因为这些年来外部存储的路径发生了变化,这就是为什么您一开始就不应该对路径进行硬编码。

如何以更“正式和正确”的方式获取路径目录,而不是硬编码路径?

使用Environment.getExternalStorageDirectory()

在您的测试环境中,/sdcard 是指向/storage/sdcard0 的符号链接或硬链接,由设备制造商设置。但是,不能保证所有 设备都会有这样的/sdcard 符号链接。

我猜 32GB 的存储空间带有内置 SD 卡

外部存储是板载 32GB 闪存的一部分。

【讨论】:

  • 谢谢马克,我也这么想!!但有一些疑问!但你清除了它..
  • 完全同意这一点但是,不能保证所有设备都会有这样的 /sdcard 符号链接。当我使用Environment.getExternalStorageDirectory() 时,返回名为sdcard0 的内部存储器路径,而我的外部SD 卡名为extsdcard。它适用于三星 Galaxy s3。
  • 感谢 cmets!但是您似乎错过了我最重要的问题:“我在使用 Environment.getExternalStorageDirectory().getAbsolutePath() 时遇到了 writer 类的运行时异常。我该如何解决这个问题?” THX
  • @Commonsware @stackoverflow.com/questions/15744064/…中的那个怎么样
  • @Raghunandan:我当然不能推荐这种技术——任何依赖于可能不存在的命令行程序(如 mount)的东西都是在自找麻烦。我真诚地希望 Google 最终会增加对多个挂载点的官方支持。
【解决方案2】:

删除 .getAbsolutePath() 就可以了。 Environment.getExternalStoreDirectory() 将为您提供制造商设置外部存储的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-04
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多