Environment.getExternalStorageDirectory()。getAbsolutePath()给出了一个不同的路径--Android

时间:2013-06-20 13:52:53

标签: android android-sdcard

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

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

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

这完全可以。

然后,eclipse给了我一个警告,说我不应该硬编码这样的路径,我应该做以下事情:

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

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

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

然后,我打印出Environment.getExternalStorageDirectory().getAbsolutePath()以进行调试。结果是

  

/存储/ sdcard0

。但是之前完美无缺的硬编码实际上是

  

/ SD卡

为什么会发生这种情况?

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

P.S。:我的手机是HTC One X,它没有外部SD卡插槽。我想32GB存储装有一个内置的SD卡,因此,本质应该是相同的。

2 个答案:

答案 0 :(得分:15)

  

为什么会发生这种情况?

由于多年来外部存储路径发生了变化,因此您首先应该从未对路径进行硬编码。

  

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

使用Environment.getExternalStorageDirectory()

在您的测试环境中,/sdcard/storage/sdcard0的符号链接或硬链接,由设备制造商设置。但是,无法保证所有设备都具有此类/sdcard符号链接。

  

我想32GB存储空间附带内置SD卡

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

答案 1 :(得分:0)

删除.getAbsolutePath(),它会没事的。 Environment.getExternalStoreDirectory()将为您提供制造商设置其外部存储的路径。