相关疑难解决方法(0)

开放失败:EACCES(权限被拒绝)

我在某些设备上访问存储时遇到了一个非常奇怪的问题.该应用程序适用于我的测试设备(Nexus 4和7,三星GS5).我的所有设备都运行Android 4.4.2.但是我收到了很多用户的电子邮件,说应用程序无法写入存储(内部存储和SD卡).从用户反馈收到的日志文件中,我可以看到问题是以下代码:

try {
    if (fStream == null) {
    fStream = new FileOutputStream(filename, true);
}
    fStream.write(data, 0, bytes);
    return;
} catch (IOException ex) {
    ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

它在fStream = new FileOutputStream(filename,true)行抛出异常; 在创建FileOutputStream时.

堆栈日志是:

W/System.err( 8147): Caused by: java.io.FileNotFoundException: /storage/emulated/0/my_folder/test_file_name.png: open failed: EACCES (Permission denied)
w/System.err( 8147):    at libcore.io.IoBridge.open(IoBridge.java:409)
W/System.err( 8147):    at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
W/System.err( 8147):    at java.io.FileOutputStream.<init>(FileOutputStream.java:128)
W/System.err( 8147):    at myapp.save(SourceFile:515)
W/System.err( 8147):    ... 8 more
W/System.err( 8147): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
W/System.err( 8147):    at libcore.io.Posix.open(Native Method) …
Run Code Online (Sandbox Code Playgroud)

android filenotfoundexception

56
推荐指数
6
解决办法
11万
查看次数

尝试将文件写入Android中的SD卡时,FileNotFoundException(权限被拒绝)

正如你可以从标题中注意到的那样,我在Android中将文件写入sdcard时遇到了问题.我已经检查了这个问题,但它没有帮助我.我想写一个将在sdcard上的公共空间中的文件,以便任何其他应用程序都可以读取它.

首先,我检查是否安装了SD卡:

Environment.getExternalStorageState();
Run Code Online (Sandbox Code Playgroud)

然后,我运行此代码:

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();
    }
Run Code Online (Sandbox Code Playgroud)

我有:

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

<application>
...
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

在我的AndroidManifest.xml中.

确切的错误是这样的:

java.io.FileNotFoundException: /storage/1510-2908/Download/secondFile.txt: open failed: EACCES (Permission denied)
Run Code Online (Sandbox Code Playgroud)

我正在模拟器上测试我的代码(模拟Nexus5 API 23).我所需的最低SDK版本是19(4.4 Kitkat).


此外,一切正常,使用相同的代码将文件写入SD卡上的私人文件夹,所以我说前代码也应该工作:

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) …
Run Code Online (Sandbox Code Playgroud)

java android filenotfoundexception android-permissions

17
推荐指数
1
解决办法
3万
查看次数