【Android】报错IOException: Read-only file system问题解决方法

举报
小雨青年 发表于 2022/03/28 22:37:38 2022/03/28
【摘要】 报错IOException: Read-only file system问题解决方法 问题描述 ###原始代码 //初始化这个钱包实例 val kit = new WalletAppKit(par...

报错IOException: Read-only file system问题解决方法

问题描述

###原始代码

//初始化这个钱包实例
 val kit = new WalletAppKit(params,new File("."),filePrefix);


  
 
  • 1
  • 2
  • 3

报错提示

12-04 14:47:45.816 8978-9037/space.edge.d.wallet E/@|amework.CrashHandler: 拦截异常:java.lang.RuntimeException,线程:WalletAppKit STARTING
                                                                            java.lang.RuntimeException: java.io.IOException: Read-only file system
                                                                                at com.google.common.base.Throwables.propagate(Throwables.java:160)
                                                                                at com.google.common.util.concurrent.AbstractIdleService$2$1.run(AbstractIdleService.java:58)
                                                                                at com.google.common.util.concurrent.Callables$3.run(Callables.java:95)
                                                                                at java.lang.Thread.run(Thread.java:776)
                                                                             Caused by: java.io.IOException: Read-only file system
                                                                                at java.io.UnixFileSystem.createFileExclusively0(Native Method)
                                                                                at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:280)
                                                                                at java.io.File.createNewFile(File.java:948)
                                                                                at java.io.File.createTempFile(File.java:1862)
                                                                                at org.bitcoinj.wallet.Wallet.saveToFile(Wallet.java:1337)
                                                                                at org.bitcoinj.kits.WalletAppKit.createOrLoadWallet(WalletAppKit.java:375)
                                                                                at org.bitcoinj.kits.WalletAppKit.startUp(WalletAppKit.java:273)
                                                                                at com.google.common.util.concurrent.AbstractIdleService$2$1.run(AbstractIdleService.java:54)
                                                                                at com.google.common.util.concurrent.Callables$3.run(Callables.java:95) 
                                                                                at java.lang.Thread.run(Thread.java:776) 

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

解决思路

增加文件读写权限的申请

在项目文件AndroidManifest.xml中增加

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

  
 
  • 1

再次编译后还是不行。

修改创建文件位置

.改成context.getFilesDir().getPath().toString()

再次编译,运行成功。

进阶改良

为了方便删除原来的文件

在开发过程中,我们要经常去删除应用数据,那么为了方便,我们可以先把对应文件夹里的数据删掉,再运行我们的代码生成新的数据。

这样可以增加开发效率。

下面是增加的删除代码

            def delete(dir:File):Unit = {
              if(dir.exists()){
                dir.listFiles().foreach { f =>
                  if (f.isFile) f.delete()
                  else delete(f)
                }
              }
            }
            delete(directory)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

简化目标文件夹的写法

引用scala的库,使文件夹更具有可读性


import sbt.Path.richFile
val directory = context.getFilesDir / "wallet"

  
 
  • 1
  • 2
  • 3

注意的是/方法

文章来源: coderfix.blog.csdn.net,作者:小雨青年,版权归原作者所有,如需转载,请联系作者。

原文链接:coderfix.blog.csdn.net/article/details/78726545

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。