问题
I try to write something into my phone memory.
At first, I hard-coded the path as:
myFile = new File("/sdcard/" + txtName.getText() + ".txt");
This works totally ok.
And then, eclipse gives me a warning saying that I shouldn't have hard-coded the path like that instead, I should do the following:
myFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/"+ txtName.getText() + ".txt");
Then I follow the correction suggestion and avoid the warning.
However, I encountered a runtime exception on the writer class.
Then, I print out Environment.getExternalStorageDirectory().getAbsolutePath() for debugging purpose. The result is
/storage/sdcard0
. But the hardcoded one that worked perfectly fine before is actually
/sdcard
.
Why would this happen?
And if I wish to avoid the warning, how can I get the path directory in a more "formal and right" way instead of hardcoding the path?
P.S.: My phone is HTC One X, which has NO external SD card slot. I guess the 32GB storage comes with a built-in SD card, and therefore, the essence should be the same.
回答1:
Why would this happen?
Because the path to external storage has changed over the years, which is why you should have never hard-coded the path in the first place.
how can I get the path directory in a more "formal and right" way instead of hardcoding the path?
Use Environment.getExternalStorageDirectory().
On your test environment, /sdcard is a symlink or hardlink to /storage/sdcard0, as set up by the device manufacturer. However, there is no guarantee that all devices will have such an /sdcard symlink.
I guess the 32GB storage comes with a built-in SD card
External storage is a portion of your on-board 32GB of flash memory.
回答2:
Remove the .getAbsolutePath() and it will be fine. Environment.getExternalStoreDirectory() will give you the path to wherever the manufacture has set their external storage.
来源:https://stackoverflow.com/questions/17215466/environment-getexternalstoragedirectory-getabsolutepath-gives-a-different-pa