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

问题描述

原始代码

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

报错提示

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) 

解决思路

增加文件读写权限的申请

在项目文件AndroidManifest.xml中增加

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

再次编译后还是不行。

修改创建文件位置

.改成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)

简化目标文件夹的写法

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

import sbt.Path.richFileval directory = context.getFilesDir / "wallet"

注意的是/方法

更多相关文章

  1. Android(安卓)系统(264)---android进阶——自定义View
  2. Android进阶---android databinding 使用
  3. Android应用程序安装过程源代码分析(2)
  4. 选项卡的使用方法一(Android学习随笔十二)
  5. android4.0不能在UI的线程里做socket
  6. Sources for Android(安卓)API 23 Platfrom not found (Android(
  7. android Studio修改生成apk文件的名称
  8. android breakpad
  9. android --多线程下载

随机推荐

  1. 具有嵌套效果循环的jquery动画
  2. JQuery属性与样式――.val()和增加样式.a
  3. 点击JSON数据加载Galleria画廊。我需要新
  4. 如何在进度条全屏表单界面上添加百分比状
  5. 基于jQuery的软键盘
  6. bootstrap框架下 单选按钮组的选中以及取
  7. Google时间轴图表:在“同一”行上多个时,单
  8. 禁用链接以停止在JQuery中双击
  9. Web开发者必备的20款超赞jQuery插件
  10. 如何将表列转换为数组?