如何创建一个文本文件并在Kotlin中写入?

时间:2018-04-05 16:24:13

标签: android kotlin

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

1 个答案:

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