最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】android中代码操作外部SD卡出错:W/System.err(1595): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)

Android crifan 9340浏览 0评论

【背景】

android程序中,相关代码:

writeFileSdcard("/mnt/sdcard/preprocessedfile",sBuilder.toString());

public void writeFileSdcard(String fileName,String message){ 
    try{ 
        //FileOutputStream fout = openFileOutput(fileName, MODE_PRIVATE);
        FileOutputStream fout = new FileOutputStream(fileName);
        byte [] bytes = message.getBytes(); 
        fout.write(bytes); 
        fout.close();
    } 
        catch(Exception e){ 
        e.printStackTrace(); 
    } 
}

结果出现异常了,执行到了:

catch(Exception e)

对应的出错log:

10-28 15:54:55.509: W/System.err(1595): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
10-28 15:54:55.509: W/System.err(1595): 	at libcore.io.Posix.open(Native Method)
10-28 15:54:55.509: W/System.err(1595): 	at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
10-28 15:54:55.509: W/System.err(1595): 	at libcore.io.IoBridge.open(IoBridge.java:400)
10-28 15:54:55.509: W/System.err(1595): 	... 13 more

即:

Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)

【解决过程】

1.参考:

Permission denied when writting into sdCard

去:

AndroidManifest.xml

中加上:

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

变成:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mm.xxx"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="17" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
    <application
        android:name="com.mm.xxx"
        android:allowBackup="true"
        ......
    </application>

</manifest>

即可。

2.关于这个,之前在:

【貌似已彻底解决】ADT中使用DDMS导入文件再次出现transfer error: Read-only file system

也是接触过,也知道的。

很明显,除了可以手动修改xml加上WRITE_EXTERNAL_STORAGE,也是可以通过

在Permission窗口中,通过图形界面,去添加对应的:

android.permission.WRITE_EXTERNAL_STORAGE

的:

permissions add write external sd permission

 

【总结】

此处,android中,用代码中操作外部sd卡,结果出错:

Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)

原因是:

没有权限操作外部sd卡。

解决办法:

给用户添加操作外部sd卡的权限:

给manifest文件(AndroidManifest.xml)中,添加上对应的:

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

即可。

转载请注明:在路上 » 【已解决】android中代码操作外部SD卡出错:W/System.err(1595): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

  1. 谢谢了有用
    安小飞8年前 (2016-03-22)回复
86 queries in 0.159 seconds, using 22.14MB memory