Android IO 问题:java.io.IOException Operation not permitted

问题描述与处理策略

1、问题描述
复制代码
java.io.IOException: Operation not permitted

java.nio.file.FileSystemException: /storage/emulated/0/test/test.txt: Operation not permitted
  1. java.io.IOException: Operation not permitted:异常为操作不被允许

  2. java.nio.file.FileSystemException: /storage/emulated/0/test/test.txt: Operation not permitted:异常为操作不被允许,并指向了具体的文件 /storage/emulated/0/test/test.txt

2、处理策略
  1. /storage/emulated/0/ 通常是外部存储的根目录,确保应用有权限读写外部存储,即 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 权限,在 AndroidManifest.xml 中声明相关权限
xml 复制代码
<!-- 从外部存储读取 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<!-- 向外部存储写入 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  1. 从 Android 6.0(API 级别 23)开始,需要在运行时请求 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 权限,先使用 ContextCompat.checkSelfPermission 方法来检查权限,如果权限未被授予,则使用 ActivityCompat.requestPermissions 方法请求权限

  2. 对于 Android 10(API 级别 29)及更高版本,直接访问外部存储可能受到限制,可以考虑使用 Storage Access Framework(SAF)来让用户选择存储位置

  3. 或者考虑使用内部存储,这样相对更加简单,且不需要声明和请求相关权限

相关推荐
笨蛋不要掉眼泪11 小时前
SpringBoot项目Excel成绩录入功能详解:从文件上传到数据入库的全流程解析
java·vue.js·spring boot·后端·spring·excel
默|笙11 小时前
【c++】红黑树的部分实现
开发语言·c++
轩情吖12 小时前
Qt常用控件之QSpinBox
开发语言·c++·qt·控件·桌面级开发·qspinbox·微调框
掘根12 小时前
【Qt】输入类控件2——SpinBox,DateEdit,TimeEdit,Dial,Slider
开发语言·qt
wshzrf12 小时前
【Java系列课程·Java学前须知】第3课 JDK,JVM,JRE的区别和优缺
java·开发语言·jvm
铅笔侠_小龙虾12 小时前
JVM 深入研究 -- 详解class 文件
java·开发语言·jvm
聪明的笨猪猪12 小时前
面试清单:JVM类加载与虚拟机执行核心问题
java·经验分享·笔记·面试
Humbunklung12 小时前
C# 使用应用RSA和ECC进行数字签名和签名验证
开发语言·c#·rsa·ecc
Larry_Yanan12 小时前
QML学习笔记(十四)QML的自定义模块
开发语言·笔记·qt·学习·ui
韶光流年都束之高阁12 小时前
Java中的TCP与UDP
java·tcp/ip·udp