java - 尝试在 Android 中将文件写入 sdcard 时出现 FileNotFoundException(权限被拒绝)

标签 java android filenotfoundexception android-permissions

从标题中可以看出,我在 Android 中将文件写入 sdcard 时遇到问题。我查过this question但这对我没有帮助。我想在 sdcard 上写入公共(public)空间中的文件,以便任何其他应用程序都可以读取它。

首先,我检查 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 上的私有(private)文件夹时一切正常,所以我想说以前的代码也应该可以工作:

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 中的公共(public)空间?

最佳答案

  1. Everything works fine with writing files to private folder on sdcard

从 Android 4.4 开始,如果您是 仅读取或写入您的应用程序私有(private)的文件。如需更多信息,请参阅 saving files that are app-private.

  1. FileNotFoundException (permission denied) when trying to write file to sdcard in Android

当您尝试在具有 API 23(Marshmallow) 的模拟器中写入文件时,您还需要在运行时请求 WRITE_EXTERNAL_STORAGE 权限。查看 thisthis了解更多详情。

关于java - 尝试在 Android 中将文件写入 sdcard 时出现 FileNotFoundException(权限被拒绝),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35285309/

相关文章:

java - 更改 JScrollpane 的原点

java - 区分文件和目录

android - 如何仅在打开应用程序时接收 Parse 推送通知,并以模态对话框形式显示

java - 如何获取应用程序类型

java - 我需要一些帮助来获取 .png 图像以与 netbeans 中的 opencv 2.4.3 库一起显示

java - JAXB 和继承

java - 未找到带有 URI + Spring MVC 的 HTTP 请求的映射

java - 在 Android 上下载 - FileNotFoundException 但文件存在

java - 文件存在时返回 false

java - 如果我尝试读取的文件与我正在使用的 java 文件位于同一包中,为什么我仍然得到 "FileNotFoundException"?