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. 或者考虑使用内部存储,这样相对更加简单,且不需要声明和请求相关权限

相关推荐
栗子叶1 分钟前
Java对象创建的过程
java·开发语言·jvm
stevenzqzq3 分钟前
android启动初始化和注入理解3
android
Amumu1213810 分钟前
React面向组件编程
开发语言·前端·javascript
有一个好名字11 分钟前
力扣-从字符串中移除星号
java·算法·leetcode
IT=>小脑虎11 分钟前
Python零基础衔接进阶知识点【详解版】
开发语言·人工智能·python
wjs202413 分钟前
C 标准库 - `<float.h>》详解
开发语言
zfj32120 分钟前
CyclicBarrier、CountDownLatch、Semaphore 各自的作用和用法区别
java·开发语言·countdownlatch·semaphore·cyclicbarrier
2501_9167665426 分钟前
【JVM】类的加载机制
java·jvm
Sag_ever27 分钟前
Java数组详解
java
张np28 分钟前
java基础-ConcurrentHashMap
java·开发语言