如何在kotlin中读取和编写android中的txt文件

Kha*_*yam 4 android kotlin

我还是kotlin和android studio的初学者.我可以访问大多数Android小部件,但我无法访问文件,到目前为止,我设法只遇到以下代码不起作用.该应用程序崩溃了......

var recordsFile = File("/LET/Records.txt")
recordsFile.appendText("record goes here")
Run Code Online (Sandbox Code Playgroud)

如果我也知道如何在特定位置创建文件,我将不胜感激.与根目录或内部存储或内部存储中的文件类似.谢谢..

Bra*_*amp 14

Kotlin 使文件读/写变得非常简单。

读取/写入内部存储:

context.openFileOutput(filename, Context.MODE_PRIVATE).use {
    it.write(message.toByteArray())
}
.
.
.
val file = File(context.filesDir, "myfile.txt")
val contents = file.readText() // Read file
Run Code Online (Sandbox Code Playgroud)

读取/写入外部存储:

val file = File(Environment.getExternalStorageDirectory()+"/path/to/myfile.txt")
file.writeText("This will be written to the file!")
.
.
.
val contents = file.readText() // Read file
Run Code Online (Sandbox Code Playgroud)


Tpo*_*6oH 9

您需要为文件使用内部或外部存储目录.

内部:

val path = context.getFilesDir()
Run Code Online (Sandbox Code Playgroud)

外部:

val path = context.getExternalFilesDir(null)
Run Code Online (Sandbox Code Playgroud)

如果要使用外部存储,则需要向清单添加权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)

创建目录:

val letDirectory = File(path, "LET")
letDirectory.mkdirs()
Run Code Online (Sandbox Code Playgroud)

然后创建您的文件:

val file = File(letDirectory, "Records.txt")
Run Code Online (Sandbox Code Playgroud)

然后你可以写信给它:

FileOutputStream(file).use {
    it.write("record goes here".getBytes())
}
Run Code Online (Sandbox Code Playgroud)

要不就

file.appendText("record goes here")
Run Code Online (Sandbox Code Playgroud)

并阅读:

val inputAsString = FileInputStream(file).bufferedReader().use { it.readText() }
Run Code Online (Sandbox Code Playgroud)

  • 如果您在活动中,您只需调用`getFilesDir()`,否则您将需要获取上下文对象。在片段中,您可以调用`getContext().getFilesDir()`。 (2认同)
  • 没有任何文档解释为什么您需要上下文,或者上下文应该来自哪里。我们是否应该在某些地方访问(或不访问)内部存储?似乎人们应该能够在任何时候写入该目录 (2认同)

Mal*_*n M 6

我只想补充TpoM6oH的答案。使用文件时,可能无法保证您对文件操作的100%成功。因此,最好尝试捕获诸如filenotfoundexception之类的异常,并适当注意程序控制的流程。

要在Android的外部存储中创建文件,您可以使用获取位置

Environment.getExternalStorageDirectory()
Run Code Online (Sandbox Code Playgroud)

并检查该位置是否存在。如果没有,请创建一个文件,然后继续使用Kotlin创建和写入文件

val sd_main = File(Environment.getExternalStorageDirectory()+"/yourlocation")
var success = true
if (!sd_main.exists()) {
    success = sd_main.mkdir()
}
if (success) {
    val sd = File("filename.txt")

    if (!sd.exists()) {
        success = sd.mkdir()
    }
    if (success) {
        // directory exists or already created
        val dest = File(sd, file_name)
        try {
            // response is the data written to file
            PrintWriter(dest).use { out -> out.println(response) }
        } catch (e: Exception) {
            // handle the exception
        }

    } else {
        // directory creation is not successful
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。

  • getExternalStorageDirectory 在 API 级别 29 java 中已弃用。此处更新/sf/ask/3998143481/ (3认同)