如何在 Kotlin 中创建文本文件并向其写入内容?

13

我刚接触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

我现在处于最大的误解和困惑点。我的目标是将内容写入文本文件,然后稍后在整个应用程序中访问该文件。

更新

尝试了以下操作,但没有看到“comment”回传:

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()
    }
1个回答

18

openFileOutput() 方法需要一个文件名,而不是一个路径。 openFileOutput() 返回的是一个位于由 getFilesDir() (在 Kotlin 中称为 filesDir) 所标识的目录中的文件上的 OutputStream 对象。

尝试:

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())
}

好的,太棒了,谢谢!我该如何读取文件并与其交互?我有以下代码,但它没有给我我写的字符串。请参见更新#2。 - mattp341
@mattp341:val text=File(applicationContext.filesDir, "test.txt").bufferedReader().use { it.readText(); } - CommonsWare
你是一个了不起的人。 - mattp341

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接