【问题标题】:java.io.fileNotFoundException(Permission denied)java.io.fileNotFoundException(权限被拒绝)
【发布时间】:2018-07-11 17:15:51
【问题描述】:

我有下一个方法:

public void saveOnSDCard() {
    File path = new File("storage/sdcard1");

    File dir = new File(path + "");
    if (!dir.exists()) {
        dir.mkdirs();
    }

    File file = new File(dir, "test.png");

    OutputStream os;
    try {
        os = new FileOutputStream(file);
        image.compress(Bitmap.CompressFormat.PNG, 100, os);
        os.flush();
        os.close();
    } catch (IOException ioe) {
        showToast("Ошибка " + ioe.toString());
    }
}

但是当我尝试调用它时,它给了我一个 java.io.fileNotFoundException(Permission denied)。 我的清单文件中有下一个权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

那么谁能告诉我怎么了?

P.S 图像 - 位图对象,我用另一种方法声明它。

【问题讨论】:

  • 你正在尝试这个 API 版本或 android os 版本是什么
  • @Psypher 我在 API 19 和 API 25 上尝试了此代码。两者都不起作用
  • 能否调试方法并获取“path”、“dir”和“file”对象的路径?
  • @GiulioPettenuzzo 已经
  • @ Максим Коваль 发布您的错误日志,以便轻松检测问题,如果您尝试运行此代码 sdk >=23,那么您必须添加运行时权限才能访问外部存储跨度>

标签: android exception permissions ioexception


【解决方案1】:

如果以下解决方案之一有效,请尝试:

  1. 将"storage/sdcard1" 替换为"storage/sdcard1/"
  2. 将path + "" 替换为path + "/"
  3. 将"test.png" 替换为"/test.png"

我认为这只是在这三行之一中缺少一个斜线

【讨论】:

  • 不幸的是,它对我没有帮助
【解决方案2】:

评论中的人告诉我,如果您有一个 android 4.4+,则只有当您将 sdcard 作为主存储器或有时当您的手机被 root 时,您才能写入 sdcard。我试过了,真的很管用。

【讨论】:

    猜你喜欢
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 2019-02-26
    • 1970-01-01
    • 2014-11-01
    相关资源
    最近更新 更多