Đọc và Ghi File trong Kotlin
🎯 Mục tiêu: Học cách đọc/ghi file với Kotlin idiomatic APIs.
💡 Khái niệm
Kotlin cung cấp extension functions cho java.io.File giúp thao tác file dễ dàng.
import java.io.File
val content = File("test.txt").readText()
File("output.txt").writeText("Hello Kotlin!")📝 Đọc File
val file = File("data.txt")
// Đọc toàn bộ thành String
val content = file.readText()
// Đọc thành List<String> theo dòng
val lines = file.readLines()
// Đọc và xử lý từng dòng (memory efficient)
file.forEachLine { line ->
println(line)
}
// Đọc với sequence (lazy)
file.useLines { lines ->
lines.filter { it.isNotBlank() }
.map { it.uppercase() }
.forEach { println(it) }
}📝 Ghi File
val file = File("output.txt")
// Ghi text (overwrite)
file.writeText("Hello World")
// Append text
file.appendText("\nNew line")
// Ghi lines
file.writeText(listOf("Line 1", "Line 2", "Line 3").joinToString("\n"))
// Buffered writing
file.bufferedWriter().use { writer ->
writer.write("Line 1\n")
writer.write("Line 2\n")
}🔧 Kiểm tra File
val file = File("test.txt")
println(file.exists()) // File tồn tại?
println(file.isFile) // Là file?
println(file.isDirectory) // Là thư mục?
println(file.canRead()) // Có thể đọc?
println(file.canWrite()) // Có thể ghi?
println(file.length()) // Kích thước (bytes)
println(file.name) // Tên file
println(file.extension) // Extension
println(file.absolutePath) // Đường dẫn tuyệt đối📁 Thao tác thư mục
val dir = File("myFolder")
// Tạo thư mục
dir.mkdir() // Tạo 1 cấp
dir.mkdirs() // Tạo nhiều cấp
// Liệt kê files
dir.listFiles()?.forEach {
println("${it.name} - ${if (it.isDirectory) "DIR" else "FILE"}")
}
// Lọc files
dir.listFiles { _, name -> name.endsWith(".txt") }
// Walk directory tree
dir.walkTopDown().forEach { println(it) }🛠️ Thực hành
fun main() {
// TODO: Đọc file CSV và parse thành danh sách users
// Format: name,age,email
}Lời giải:
import java.io.File
data class User(val name: String, val age: Int, val email: String)
fun main() {
val users = File("users.csv")
.readLines()
.drop(1) // Skip header
.map { line ->
val (name, age, email) = line.split(",")
User(name, age.toInt(), email)
}
users.forEach { println(it) }
}⚠️ Lưu ý
[!TIP] Dùng
useđể tự động close resources:File("test.txt").bufferedReader().use { reader -> reader.readLine() } // Tự động close
✅ Checklist
- Đọc file với
readText(),readLines() - Ghi file với
writeText(),appendText() - Xử lý file lớn với
useLines - Dùng
useđể tự động close
Tiếp theo: Working with JSON
Last updated on