根据标题可以看出,我在Android设备上写入sd卡文件时遇到了问题。我查看了 这个问题 ,但它没有帮助我。我想要写入一个公共空间的文件,以便任何其他应用程序都能够读取。
首先,我检查sd卡是否已挂载:
Environment.getExternalStorageState();
然后,我运行了这段代码:
File baseDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
baseDir.mkdirs();
File file = new File(baseDir, "file.txt");
try {
FileOutputStream out = new FileOutputStream(file);
out.flush();
out.close();
Log.d("NEWFILE", file.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
我有:
<manifest>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application>
...
</application>
</manifest>
在我的AndroidManifest.xml中。
确切的错误是这样的:
java.io.FileNotFoundException: /storage/1510-2908/Download/secondFile.txt: open failed: EACCES (Permission denied)
我正在模拟器上测试我的代码(模拟Nexus5 API 23)。我的最低SDK版本为19(4.4 Kitkat)。
此外,使用相同的代码将文件写入sdcard上的私有文件夹也可以正常工作,因此我认为前面的代码也应该可以:
File newFile = new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), "esrxdtcfvzguhbjnk.txt");
newFile.getParentFile().mkdirs();
try {
FileOutputStream out = new FileOutputStream(newFile);
out.flush();
out.close();
Log.d("NEWFILE", newFile.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
有人知道问题出在哪吗?是不是KitKat 4.4不再允许在sd卡中的公共空间写入了?
Log.d("NEWFILE", file.getAbsolutePath());
中你得到了什么值? - M D