android中出现 java.io.IOException: open failed: EACCES (Permission denied)问题解决

今天在做项目的时候,在进行IO读写的时候出现java.io.IOException: open failed: EACCES (Permission denied)问题解决 ,一开始我还以为是Permission 的问题,不过找到AndroidManifest文件一看的时候:

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

我已经加了读写的权限了啊,怎么还会报这个错呢?

我接着查看IO操作的时候,文件保存的路径以及SD是否真的能用:
我用的是外部存储路径

String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/bank.apk";

校验SD卡是否可用的代码

public static boolean isExistSDCard() {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            File sd = new File(Environment.getExternalStorageDirectory().getPath());
            return sd.canWrite();
        } else
            return false;
    }

通过Log我发现isExistSDCard()方法返回了false,我突然间好像明白了什么。

因为公司是做自定义机器的android应用开发,机器问题很是经常出现,兼容程序在机器上能运行,我在内外部存储做了一层判断,代码如下:

boolean isExistSDCard = isExistSDCard();
        LogUtils.d(TAG,"isExistSDCard======="+isExistSDCard);
        String path = "";
        if (isExistSDCard){
            path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+apkName;
            LogUtils.d(TAG,"path======="+path);
        }else {
            path ="/data/data/com.tecsun.tsb/cache/"+apkName;
            LogUtils.d(TAG,"path======="+path);
        }
    原文作者:追梦小乐
    原文地址: https://www.jianshu.com/p/52a24831d6c8
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞