【发布时间】:2016-05-19 00:58:04
【问题描述】:
从标题中可以看出,我在 Android 中将文件写入 sdcard 时遇到问题。我检查了this question,但对我没有帮助。我想在 sdcard 上写入公共空间中的文件,以便任何其他应用程序都可以读取它。
首先,我检查 sdcard 是否挂载:
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 不再允许写入 sdcard 中的公共空间?
【问题讨论】:
-
你在
Log.d("NEWFILE", file.getAbsolutePath());得到的价值是多少? -
@Drag0 您还需要在运行时请求
WRITE_EXTERNAL_STORAGE权限,因为您正在测试它“Nexus5 API 23”。 -
我猜是因为android m中的权限处理。如deepanker的链接所述,您必须添加权限请求,才能访问android m中的存储。
标签: java android filenotfoundexception android-permissions