问题描述与处理策略
1、问题描述
java.io.IOException: Operation not permitted
java.nio.file.FileSystemException: /storage/emulated/0/test/test.txt: Operation not permitted
-
java.io.IOException: Operation not permitted
:异常为操作不被允许 -
java.nio.file.FileSystemException: /storage/emulated/0/test/test.txt: Operation not permitted
:异常为操作不被允许,并指向了具体的文件/storage/emulated/0/test/test.txt
2、处理策略
/storage/emulated/0/
通常是外部存储的根目录,确保应用有权限读写外部存储,即READ_EXTERNAL_STORAGE
和WRITE_EXTERNAL_STORAGE
权限,在AndroidManifest.xml
中声明相关权限
xml
<!-- 从外部存储读取 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 向外部存储写入 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-
从 Android 6.0(API 级别 23)开始,需要在运行时请求
READ_EXTERNAL_STORAGE
和WRITE_EXTERNAL_STORAGE
权限,先使用ContextCompat.checkSelfPermission
方法来检查权限,如果权限未被授予,则使用ActivityCompat.requestPermissions
方法请求权限 -
对于 Android 10(API 级别 29)及更高版本,直接访问外部存储可能受到限制,可以考虑使用 Storage Access Framework(SAF)来让用户选择存储位置
-
或者考虑使用内部存储,这样相对更加简单,且不需要声明和请求相关权限