今天在做项目的时候,在进行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);
}