我是Kotlin / Android开发的新手。我试图简单地将文本写入文本文件。我根本无法弄清楚如何做到这一点。我试过了:
File("filename.txt").printWriter().use { out ->
out.println("${it.key}, ${it.value}")
}
我得到了以下内容。 (旁注," filename.txt"位于我项目的assets文件夹中)
Caused by: java.io.FileNotFoundException: prices.txt (Read-only file system)
所以我发现我需要写信给我获得许可的地方。据我所知,这是内部私人存储。我通过使用:
找出了我有权写入哪个目录filesDir
那给了我:
/data/user/com.example.myname.appname/files
所以从我到目前为止看到的我只需要在这个目录中创建一个文件,写入所述文件,并在我想要的时候从中读取。问题是我不知道该怎么做。但我尝试这样做:
// create file?
val file = File(applicationContext.filesDir, "test.txt")
//try to write to said file?
applicationContext.openFileOutput(file.toString(), Context.MODE_PRIVATE).use
{
it.write("test".toByteArray())
}
但后来我收到了这个错误:
Caused by: java.lang.IllegalArgumentException: File
/data/user/0/com.example.pawlaczykm.dollarsense/files/test.txt contains
a path separator
我处于最大的误解和困惑之中。同样,我的目标是将某些内容写入文本文件,然后在整个应用程序中访问该文件。
尝试以下操作并且没有回复"评论":
File(applicationContext.filesDir, "test.txt").printWriter().use{ out ->
out.println("content")
}
File(applicationContext.filesDir, "test.txt").bufferedReader().use{ out ->
var text5 = out.toString()
Toast.makeText(this, text5.toString(), Toast.LENGTH_LONG).show()
}
答案 0 :(得分:8)
openFileOutput()
采用文件名,而不是路径。 openFileOutput()
会在OutputStream
(位于Kotlin的a.k.a.,getFilesDir()
标识的目录中的文件上返回filesDir
。
尝试:
File(applicationContext.filesDir, "test.txt").printWriter().use { out ->
out.println("${it.key}, ${it.value}")
}
或:
applicationContext.openFileOutput("test.txt", Context.MODE_PRIVATE).use
{
it.write("test".toByteArray())
}