我尝试在手机内存中写东西。
起初,我将路径硬编码为:
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卡,因此,本质应该是相同的。
答案 0 :(得分:15)
为什么会发生这种情况?
由于多年来外部存储路径发生了变化,因此您首先应该从未对路径进行硬编码。
如何以更“正式和正确”的方式获取路径目录而不是硬编码路径?
使用Environment.getExternalStorageDirectory()
。
在您的测试环境中,/sdcard
是/storage/sdcard0
的符号链接或硬链接,由设备制造商设置。但是,无法保证所有设备都具有此类/sdcard
符号链接。
我想32GB存储空间附带内置SD卡
外部存储是板载32GB闪存的一部分。
答案 1 :(得分:0)
删除.getAbsolutePath(),它会没事的。 Environment.getExternalStoreDirectory()将为您提供制造商设置其外部存储的路径。