在安卓系统中试图将文件写入SD卡时,出现FileNotFoundException(权限被拒绝)。[英] FileNotFoundException (permission denied) when trying to write file to sdcard in Android

问题描述

您可以从标题中注意到,我将文件写入Android中的SDCARD有问题.我已经检查了 a>,但这对我没有帮助.我想编写将在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).


另外,用相同代码将文件写入私人文件夹的文件都可以正常工作,所以我说以前的代码也应该有效:

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中写入公共空间,或者?

推荐答案

  1. 一切正常,可以将文件写入sdcard上的私人文件夹

以Android 4.4开始,如果您是 读取或编写您应用程序私有的文件.有关更多信息,请参见保存app-private的文件.

  1. filenotfoundexception(拒绝权限)试图将文件写入Android

当您尝试在具有API 23(棉花糖)的模拟器中编写文件时,您还需要在运行时请求WRITE_EXTERNAL_STORAGE权限.检查 this this 以获取更多详细信息.

本文地址:https://www.itbaoku.cn/post/978768.html