You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中new BufferedReader(new FileReader)触发捕获错误问题排查

触发异常的常见原因
  • 运行时权限未申请:Android 6.0(API 23)及以上版本,仅在AndroidManifest中声明存储权限无效,需要在代码中主动触发动态权限申请,待用户同意授权后才能读取外部存储文件。
  • 分区存储规则限制:如果第二款App的targetSdkVersion >= 29(Android 10),系统默认开启分区存储,Environment.getExternalStorageDirectory()访问公共目录的能力被限制,需要在Manifest的<application>节点添加android:requestLegacyExternalStorage="true"临时适配;如果targetSdkVersion >=30(Android 11),读取公共目录下其他应用生成的文件需要额外申请MANAGE_EXTERNAL_STORAGE权限。
  • 文件本身问题:目标路径对应的文件不存在、文件被其他应用独占锁定、文件所属目录的读写权限未开放给当前App,都会触发IO异常。
查看具体错误信息的方法
  • 查看Logcat日志:你在catch块中已经写了e.printStackTrace(),将手机连接Android Studio,在Logcat面板过滤你的App包名,就能看到完整的异常堆栈信息,可直接区分是权限拒绝、文件不存在还是其他IO错误。
  • 弹窗打印错误:在catch块中添加代码myFun.ShowToast(getApplicationContext(), "错误原因:"+e.getMessage());,可直接在手机上看到精简的错误提示。
  • 前置校验判断:在初始化FileReader前增加判断逻辑,分别校验gpxfile.exists()(文件是否存在)、gpxfile.canRead()(是否有读权限),根据校验结果弹对应提示,可快速定位问题。
适配建议
  • 优先使用App私有目录存储文件,通过getExternalFilesDir(null)获取私有目录路径,读写该路径下的文件不需要申请任何存储权限,兼容性最好。
  • 如果必须访问公共存储目录,按照对应Android版本的权限规则申请动态权限和分区存储适配权限。

内容的提问来源于stack exchange,提问作者Mr Chan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:39:03