打开失败:SD卡上的EACCES(权限被拒绝)

时间:2015-07-14 11:57:03

标签: java android sd-card filewriter

我无法将FileWriter与SD卡上的文件一起使用 我在Manifest中有以下权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

我正在使用以下代码

File selected = new File("/storage/extSdCard/", "00 - Copy.txt");
FileWriter fw;
try {
    fw = new FileWriter(selected, false);
    fw.write(content);
    fw.close();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

我在logcat中得到以下内容,知道/ storage / extSdCard / 00 - Copy.txt存在。

07-14 14:50:48.722  18216-19903/tk.hasankassem.supererase W/System.err﹕ java.io.FileNotFoundException: /storage/extSdCard/00 - Copy.txt: open failed: EACCES (Permission denied)
07-14 14:50:48.722  18216-19903/tk.hasankassem.supererase W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:456)
07-14 14:50:48.722  18216-19903/tk.hasankassem.supererase W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
07-14 14:50:48.722  18216-19903/tk.hasankassem.supererase W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:127)
07-14 14:50:48.722  18216-19903/tk.hasankassem.supererase W/System.err﹕ at java.io.FileWriter.<init>(FileWriter.java:96)
07-14 14:50:48.722  18216-19903/tk.hasankassem.supererase W/System.err﹕ at tk.hasankassem.supererase.MainActivity$5.run(MainActivity.java:302)
07-14 14:50:48.722  18216-19903/tk.hasankassem.supererase W/System.err﹕ Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
07-14 14:50:48.722  18216-19903/tk.hasankassem.supererase W/System.err﹕ at libcore.io.Posix.open(Native Method)
07-14 14:50:48.722  18216-19903/tk.hasankassem.supererase W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
07-14 14:50:48.722  18216-19903/tk.hasankassem.supererase W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:442)
07-14 14:50:48.722  18216-19903/tk.hasankassem.supererase W/System.err﹕ ... 4 more

我尝试过使用Environment.getExternalStorageDirectory(),但它也没有用。

更新 当我使用Environment.getExternalStorageDirectory()时,它会写入内部存储而不是SD卡。

1 个答案:

答案 0 :(得分:1)

应在<application>标记之外定义以下权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />