How to read and write txt files in android in kotlin

后端 未结 5 1056
小鲜肉
小鲜肉 2021-02-05 22:17

I\'m still pretty much a beginner in kotlin and android studio. I can access most of the android widgets but I cannot access files and so far I managed to come across only the f

相关标签:
5条回答
  • 2021-02-05 22:55
    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 
        }
    
    0 讨论(0)
  • 2021-02-05 22:56

    In 5 lines: create file to internal directory if not exists, write to file, read file

    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")
    
    0 讨论(0)
  • 2021-02-05 23:11

    You need to use internal or external storage directory for your file.

    Internal:

    val path = context.getFilesDir()
    

    External:

    val path = context.getExternalFilesDir(null)
    

    If you want to use external storage you'll need to add a permission to the manifest:

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

    Create your directory:

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

    Then create your file:

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

    Then you can write to it:

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

    or just

    file.appendText("record goes here")
    

    And read:

    val inputAsString = FileInputStream(file).bufferedReader().use { it.readText() }
    
    0 讨论(0)
  • 2021-02-05 23:14

    Kotlin has made file reading/writing quite simple.

    For reading/writing to internal storage:

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

    For reading/writing to external storage:

    val file = File(Environment.getExternalStorageDirectory()+"/path/to/myfile.txt")
    file.writeText("This will be written to the file!")
    .
    .
    .
    val contents = file.readText() // Read file
    
    0 讨论(0)
  • 2021-02-05 23:20

    I just want to add on to TpoM6oH's answer. When working with Files, you may be not guaranteed with 100% success on the file operations you intend. So, it is a better practice to try and catch for exceptions like filenotfoundexception etc. and take a due care about the flow of program control.

    To create a file at the external storage in Android, you can get the location using

    Environment.getExternalStorageDirectory()
    

    and check if the location exists. If it does not, create one and continue creating and writing your file using 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
    }
    

    Hope this helps.

    0 讨论(0)
提交回复
热议问题