11

我试着在我的手机内存中写一些东西。

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

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

这完全可以。

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

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

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

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

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

/存储/SD卡0

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

/SD卡

.

为什么会发生这种情况?

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

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

4

2 回答 2

15

为什么会发生这种情况?

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

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

使用Environment.getExternalStorageDirectory().

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

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

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

于 2013-06-20T13:58:41.607 回答
0

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

于 2015-05-05T14:19:51.943 回答