在stackoverflow中也有类似的错误,但在尝试解决方案后(如您将在下几行中看到的),我会遇到相同的错误。
我在使用Nexus 5X api 27 oreo rom的模拟器和使用Android4.4的华为真手机中都试过了
在这两个设备中,我都有相同的错误:
FileNotFoundException: /storage/sdcard0/Myfile.txt: open failed: EACCES (Permission denied)
String content = "hello world";
File file;
FileOutputStream outputStream;
try {
file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "MyFile.txt");
outputStream = new FileOutputStream(file);
outputStream.write(content.getBytes());
outputStream.close();
} catch (IOException e) {
Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp">
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-feature
android:name="android.hardware.telephony"
android:required="false" />
<uses-feature
android:name="android.hardware.location"
android:required="false" />
<uses-feature
android:name="android.hardware.location.gps"
android:required="false" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".activities.Activity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
对于Android>=6.0的设备,您必须在运行时请求权限
对于Android4,适当添加android:maxSDKversion=“18”
生成此异常,尝试删除它
编辑:对于Android4.4及以上版本,如果只想写到外部存储,则不WRITE_EXTERNAL_STORAGE,从doc:
在其他设备中没有发生这种情况,我测试的设备:、、
我遇到一个例外,当我试图打开FileInputStream时,文件打开权限被拒绝。 这是stacktrace: 是的,我在清单中有权限:
在构建TargetSDKVersionV29时,我无法访问存储。 下面是我的分级配置: 请注意,已授予权限,并且在构建时,相同的设置工作良好。 下面是我的实现:
并且在清单中权限集是正确的
更新 结果发现我调用open和close FileOutputStream的频率太高了,这会在某个时候抛出FileNotFoundException。听起来更像是线程问题。