• 全部
...

安卓文件读取,求助,各种办法都试了,不知道问题在哪儿,大神们帮帮我。

你还要写代码吗 2020-12-29 08:58:03

  1. W/System.err: java.io.FileNotFoundException: /storage/emulated/0/demo/demo_test.txt: open failed: EACCES (Permission denied)
  2. W/System.err: at libcore.io.IoBridge.open(IoBridge.java:496)
  3. at java.io.FileInputStream.<init>(FileInputStream.java:159)
  4. at com.dji.importSDKDemo.MainActivity$OnClick.onClick(Unknown Source:68)
  5. at android.view.View.performClick(View.java:7185)
  6. at android.view.View.performClickInternal(View.java:7162)
  7. at android.view.View.access$3500(View.java:819)
  8. at android.view.View$PerformClick.run(View.java:27684)
  9. at android.os.Handler.handleCallback(Handler.java:883)
  10. at android.os.Handler.dispatchMessage(Handler.java:100)
  11. at android.os.Looper.loop(Looper.java:224)
  12. at android.app.ActivityThread.main(ActivityThread.java:7562)
  13. at java.lang.reflect.Method.invoke(Native Method)
  14. at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
  15. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
  16. Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
  17. W/System.err: at libcore.io.Linux.open(Native Method)
  18. at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
  19. at libcore.io.BlockGuardOs.open(BlockGuardOs.java:252)
  20. at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
  21. W/System.err: at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:7461)
  22. W/System.err: at libcore.io.IoBridge.open(IoBridge.java:482)


我在大疆sdk上开发应用,目前测试遇到的问题为:我需要读取手机里的文件,使用File类读取,再通过InputFileStream读取成输入流。提取内部的数据进行应用。上面的报错详细信息。

核心代码如下:
Manifest文件下的权限申请:

  1. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
  2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  3. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />


读取代码:

  1. File file = new File(Environment.getExternalStorageDirectory() +
  2. "/demo/demo_test.txt");
  3. Toast.makeText(getApplicationContext(), file.canRead() ? "true" : "false",
  4. Toast.LENGTH_SHORT).show();
  5. try {
  6. FileInputStream inputStream = new FileInputStream(file);
  7. byte[] temp = new byte[98];
  8. while (inputStream.read(temp) != -1) {
  9. Log.d("DATA", new String(temp));
  10. }
  11. } catch (IOException e) {
  12. e.printStackTrace();
  13. }

...全文
给本帖投票
2706 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 12 楼 weixin_47106319 的回复:
我也遇到一样问题,有结果了吗
我们项目组在后续使用的时候,将安卓版本升级到了30,并加上了 在AndroidManifest.xml文件的application 标签下 加一条属性 android:requestLegacyExternalStorage="true" 上面的语句,后来就能用了,但是我感觉这始终部署长久之计。希望大家有啥办法还是说一说。
weixin_47106319 2021-02-10
  • 打赏
  • 举报
回复
我也遇到一样问题,有结果了吗
yeah2000 2020-12-30
  • 打赏
  • 举报
回复
增加动态申请权限,让用户确认。 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { int checkAccessFinePermission = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); if (checkAccessFinePermission != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 12); Log.d("TAG", "没有权限,请求权限"); } Log.d("TAG", "已有权限"); }
立青_ 中级 2020-12-30
  • 打赏
  • 举报
回复
申请权限...
比特灵 初级 2020-12-30
  • 打赏
  • 举报
回复
百度: android6.0以上 文件访问权限
黄小楼 2020-12-30
  • 打赏
  • 举报
回复
按照6楼的去做。只要是在存储卡的外部环境。File()就会报错
  • 打赏
  • 举报
回复
我将这个功能单独做成一个app,读取文件,是没有任何问题的。同样的代码合到程序里就报错了。
  • 打赏
  • 举报
回复
引用 7 楼 头发还没秃a 的回复:
[quote=引用 6 楼 头发还没秃a 的回复:]在AndroidManifest.xml文件的application 标签下 加一条属性 android:requestLegacyExternalStorage="true"
安卓10之后的话[/quote] combilesdkversion 28 min sdk version 16
头发还没秃a 2020-12-30
  • 打赏
  • 举报
回复
引用 6 楼 头发还没秃a 的回复:
在AndroidManifest.xml文件的application 标签下 加一条属性 android:requestLegacyExternalStorage="true"
安卓10之后的话
头发还没秃a 2020-12-30
  • 打赏
  • 举报
回复
在AndroidManifest.xml文件的application 标签下 加一条属性 android:requestLegacyExternalStorage="true"
  • 打赏
  • 举报
回复
引用 3 楼 yeah2000 的回复:
增加动态申请权限,让用户确认。 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { int checkAccessFinePermission = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); if (checkAccessFinePermission != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 12); Log.d("TAG", "没有权限,请求权限"); } Log.d("TAG", "已有权限"); }
按照此方法试过了,还是一样的错误。
  • 打赏
  • 举报
回复
回1,2,3楼,已测试该方法,但是还是一样的错误。 手机上测试显示授权成功,但是在catch那一步,FileNotFoundException

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部