📁 Đọc và Ghi File
🎯 Mục tiêu: Học cách đọc/ghi file với Kotlin idiomatic APIs.
💡 Khái niệm
Phần tiêu đề “💡 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
Phần tiêu đề “📝 Đọc File”val file = File("data.txt")
// Đọc toàn bộ thành Stringval content = file.readText()
// Đọc thành List<String> theo dòngval 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
Phần tiêu đề “📝 Ghi File”val file = File("output.txt")
// Ghi text (overwrite)file.writeText("Hello World")
// Append textfile.appendText("\nNew line")
// Ghi linesfile.writeText(listOf("Line 1", "Line 2", "Line 3").joinToString("\n"))
// Buffered writingfile.bufferedWriter().use { writer -> writer.write("Line 1\n") writer.write("Line 2\n")}🔧 Kiểm tra File
Phần tiêu đề “🔧 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 fileprintln(file.extension) // Extensionprintln(file.absolutePath) // Đường dẫn tuyệt đối📁 Thao tác thư mục
Phần tiêu đề “📁 Thao tác thư mục”val dir = File("myFolder")
// Tạo thư mụcdir.mkdir() // Tạo 1 cấpdir.mkdirs() // Tạo nhiều cấp
// Liệt kê filesdir.listFiles()?.forEach { println("${it.name} - ${if (it.isDirectory) "DIR" else "FILE"}")}
// Lọc filesdir.listFiles { _, name -> name.endsWith(".txt") }
// Walk directory treedir.walkTopDown().forEach { println(it) }🛠️ Thực hành
Phần tiêu đề “🛠️ 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 ý
Phần tiêu đề “⚠️ Lưu ý”✅ Checklist
Phần tiêu đề “✅ 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