【Android】报错IOException: Read-only file system问题解决方法
16lz
2021-01-24
报错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"
注意的是/
是方法。
更多相关文章
- Android(安卓)系统(264)---android进阶——自定义View
- Android进阶---android databinding 使用
- Android应用程序安装过程源代码分析(2)
- 选项卡的使用方法一(Android学习随笔十二)
- android4.0不能在UI的线程里做socket
- Sources for Android(安卓)API 23 Platfrom not found (Android(
- android Studio修改生成apk文件的名称
- android breakpad
- android --多线程下载