当前位置: 首页 > 面试题库 >

尝试在Android中将文件写入sdcard时发生FileNotFoundException(权限被拒绝)

杨晟
2023-03-14
问题内容

从标题中可以看到,我在Android中将文件写入sdcard时遇到问题.我想写入将在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写入公共空间了吗?


问题答案:
  1. 将文件写入sdcard上的私有文件夹,一切正常

从Android
4.4开始,如果您仅读取或写入应用程序私有的文件,则不需要这些权限。有关更多信息,请参阅保存应用程序专用文件。

  1. 尝试在Android中将文件写入sdcard时发生FileNotFoundException(权限被拒绝)

当您尝试在具有API
23(棉花糖)的仿真器中写入文件WRITE_EXTERNAL_STORAGE时,还需要在运行时请求权限。检查这与此了解更多详情。



 类似资料:
  • 正如您从标题中注意到的,我在Android中将文件写入SD卡时遇到了问题。我检查了这个问题,但它对我没有帮助。我想在SD卡上的公共空间中编写文件,以便任何其他应用程序都可以读取它。 首先,我检查SD卡是否已安装: 然后,我运行以下代码: 我有: 在我的AndroidManifest中。xml。 确切的错误是: 我正在模拟器上测试我的代码(模拟Nexus5 API 23)。我所需的最低SDK版本是1

  • 我试图在txt文件中写入从html表单获取的数据,但出现以下错误:警告:fopen(/var/www/4/datos.txt):无法打开流:在/var/www/4/comprobacionformulaio中的权限被拒绝。php第13行警告:fwrite()希望参数1是资源,布尔值在/var/www/4/comprobacionformulaio中给出。php第16行警告:fclose()希望参数

  • 我试图在android中写入文件,但一直出现以下错误: java.io.FileNotFoundException: /storage/emulated/0/Notes/TestFile.txt(权限拒绝) 搜索此网站可以简单地解决此问题,即向应用程序清单文件添加WRITE\u EXTERNAL\u存储,但这对我不起作用。我一直在犯同样的错误。

  • 我遇到一个例外,当我试图打开FileInputStream时,文件打开权限被拒绝。 这是stacktrace: 是的,我在清单中有权限:

  • 问题内容: 我正在尝试使用Python在Windows OS上创建并写入一个临时文件。我已经使用Python模块创建了一个临时文件。 但是当我去写那个临时文件的时候我得到了一个错误。我不可以写临时文件吗?难道我做错了什么?如果要创建并写入临时文件,应该如何在Python中进行操作?为了安全起见,我想在temp目录中创建一个临时文件,而不是在本地(在.exe正在执行的目录中)中创建一个临时文件。 问

  • 在构建TargetSDKVersionV29时,我无法访问存储。 下面是我的分级配置: 请注意,已授予权限,并且在构建时,相同的设置工作良好。 下面是我的实现: