Skip to Content

Đọc và Ghi File trong Kotlin

1. Giới thiệu

Kotlin cung cấp extension functions tiện lợi để làm việc với files.

2. Import

import java.io.File

3. Đọc toàn bộ file

fun main() { val file = File("test.txt") // Đọc toàn bộ nội dung val content = file.readText() println(content) // Đọc thành danh sách dòng val lines = file.readLines() lines.forEach { println(it) } // Đọc bytes val bytes = file.readBytes() }

4. Ghi file

fun main() { val file = File("output.txt") // Ghi text (overwrite) file.writeText("Hello, World!") // Append text file.appendText("\nNew line") // Ghi bytes file.writeBytes(byteArrayOf(72, 101, 108, 108, 111)) }

5. Đọc file từng dòng

fun main() { val file = File("large_file.txt") // Đọc từng dòng (memory efficient) file.forEachLine { line -> println(line) } // Với useLines (auto-closes) file.useLines { lines -> lines.filter { it.isNotBlank() } .forEach { println(it) } } }

6. BufferedReader và BufferedWriter

fun main() { // Đọc với buffered reader File("input.txt").bufferedReader().use { reader -> var line: String? while (reader.readLine().also { line = it } != null) { println(line) } } // Ghi với buffered writer File("output.txt").bufferedWriter().use { writer -> writer.write("Line 1") writer.newLine() writer.write("Line 2") } }

7. PrintWriter

fun main() { File("output.txt").printWriter().use { writer -> writer.println("Line 1") writer.println("Line 2") writer.printf("Formatted: %d%n", 42) } }

8. Kiểm tra và quản lý files

fun main() { val file = File("test.txt") // Kiểm tra println(file.exists()) println(file.isFile) println(file.isDirectory) println(file.length()) // Size in bytes println(file.lastModified()) // Tạo/Xóa file.createNewFile() file.delete() // Rename/Move file.renameTo(File("new_name.txt")) }

9. Làm việc với Directories

fun main() { val dir = File("my_folder") // Tạo directory dir.mkdir() // Tạo 1 cấp dir.mkdirs() // Tạo nhiều cấp // Liệt kê files dir.listFiles()?.forEach { file -> println("${file.name} - ${if (file.isDirectory) "DIR" else "FILE"}") } // Walk directory tree dir.walk().forEach { println(it.path) } }

10. Xử lý lỗi

import java.io.IOException fun main() { val file = File("maybe_exists.txt") try { val content = file.readText() println(content) } catch (e: IOException) { println("Error reading file: ${e.message}") } // Hoặc với runCatching val result = runCatching { file.readText() } result.onSuccess { println(it) } .onFailure { println("Error: ${it.message}") } }

📝 Tóm tắt

  • readText(), readLines() để đọc
  • writeText(), appendText() để ghi
  • use {} tự động close resources
  • forEachLine {} xử lý từng dòng
  • File.walk() duyệt recursive
  • runCatching cho error handling
Last updated on