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

相关推荐
小王不爱笑13218 小时前
IO 模型
开发语言·python
短剑重铸之日18 小时前
《ShardingSphere解读》07 读写分离:如何集成分库分表+数据库主从架构?
java·数据库·后端·架构·shardingsphere·分库分表
知我Deja_Vu18 小时前
【避坑指南】ConcurrentHashMap 并发计数优化实战
java·开发语言·python
AI+程序员在路上18 小时前
CANopen 协议:介绍、调试命令与应用
linux·c语言·开发语言·网络
2401_8318249618 小时前
基于C++的区块链实现
开发语言·c++·算法
谢白羽19 小时前
vllm实践
android·vllm
m0_5180194819 小时前
C++与机器学习框架
开发语言·c++·算法
ZTLJQ19 小时前
深入理解逻辑回归:从数学原理到实战应用
开发语言·python·机器学习
qq_4176950519 小时前
C++中的代理模式高级应用
开发语言·c++·算法
daidaidaiyu19 小时前
Spring IOC 源码学习 事务相关的 BeanDefinition 解析过程 (XML)
java·spring