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

时间:2017-07-19 14:41:01

标签: android kotlin

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

var recordsFile = File("/LET/Records.txt")
recordsFile.appendText("record goes here")

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

5 个答案:

答案 0 :(得分:7)

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

内部:

val path = context.getFilesDir()

外部:

val path = context.getExternalFilesDir(null)

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

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

创建目录:

val letDirectory = File(path, "LET")
letDirectory.mkdirs()

然后创建你的文件:

val file = File(letDirectory, "Records.txt")

然后你可以写信给它:

FileOutputStream(file).use {
    it.write("record goes here".getBytes())
}

或只是

file.appendText("record goes here")

并阅读:

val inputAsString = FileInputStream(file).bufferedReader().use { it.readText() }

答案 1 :(得分:4)

我只想补充一下TpoM6oH的答案。使用文件时,您可能无法保证在您想要的文件操作上取得100%的成功。因此,尝试捕获诸如filenotfoundexception等异常是一种更好的做法,并对程序控制的流程给予应有的注意。

要在Android中的外部存储空间创建文件,您可以使用

获取位置
Environment.getExternalStorageDirectory()

并检查位置是否存在。如果没有,请创建一个并继续使用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
    }
}

希望这有帮助。

答案 2 :(得分:1)

5行:如果不存在,则将文件创建到内部目录,写入文件,读取文件

val file = File(ctx.filesDir, FILE_NAME)
file.createNewFile()
file.appendText("record goes here")
val readResult = FileInputStream(file).bufferedReader().use { it.readText() }
println("readResult=$readResult")

答案 3 :(得分:0)

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

用于读取/写入外部存储空间:

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

答案 4 :(得分:0)

fun loadWords(context: Context): ArrayList<String> {
        
    val Word = ArrayList<String>()
        var line: String
        var word = ""
        var weight = 0
        try {
            val reader: BufferedReader
            val file = context.assets.open("spam_keywords.txt")
            reader = BufferedReader(InputStreamReader(file))
            while ((reader.readLine()) != null) {
                line = reader.readLine()
                val st = StringTokenizer(line)
                while (st.hasMoreElements()) {
                    word = st.nextElement().toString()
                }
                Word.add(word)
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
        println(Word)
        return Word 
    }