java.io.FileNotFoundException:open failed:EACCES(权限被拒绝)

时间:2015-09-11 12:54:01

标签: android fileoutputstream

我尝试将位图存储到存储

时出现此错误
     File path = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "picture");
    if (! path.exists()) {
        path.mkdirs();
        if (!path.exists()) {
            return null;
        }
    }
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HH_mm_ss", Locale.CHINA).format(new Date());
    File imagePath = new File(path.getPath() + "_" + "IMG_" + timeStamp + ".jpg");
    BufferedOutputStream fos;
    try {
        fos =new BufferedOutputStream(new FileOutputStream(imagePath));
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
        fos.flush();
        fos.close();
        return imagePath;
    } catch (FileNotFoundException e) {
        Log.e("GREC", e.getMessage(), e);
        return null;
    } catch (IOException e) {
        Log.e("GREC", e.getMessage(), e);
        return null;
    }

fos = new BufferedOutputStream(new FileOutputStream(imagePath)); [我调试并发现此行导致错误]

在清单中,权限集是正确的

3 个答案:

答案 0 :(得分:8)

在Android10上

use method -> Environment.getExternalStoragePublicDirectory()

java.io.FileNotFoundException: /storage/emulated/0/Download open failed: EACCES (Permission denied)

在您的应用与范围存储完全兼容之前,您可以根据应用的目标SDK级别或requestLegacyExternalStorage清单属性暂时选择退出:

Google在Android Q上具有一项新功能:外部存储的过滤视图。快速解决方案是将以下代码添加到AndroidManifest.xml文件中:


<manifest ... >
  <!-- This attribute is "false" by default on apps targeting
       Android 10 or higher. -->
  <application android:requestLegacyExternalStorage="true" ... >
    ...
  </application>
</manifest>

答案 1 :(得分:4)

问题是我的权限格式错误

  

使用权限android:name =&#34; android.permission.WRITE_EXTERNAL_STORAGE

android.permission应为小写

  

使用的许可   机器人:名称= android.permission.WRITE_EXTERNAL_STORAGE

如果我添加imagePath.createNewFile();

它也会抛出FileNotFoundExceptions

答案 2 :(得分:1)

此问题在Android Pie和更高版本中。 因此,将这行添加到清单文件已修复的错误中。

<application
    ...
    ...
    android:requestLegacyExternalStorage="true">
</application>