Kotlin
Dosya I/O
File ile verileri dosyaya kaydedip yüklersin.
Library'ye dosya kaydetme
Bu ders, Library'ye dosyaya kaydetme ve dosyadan okuma metotlarını ekler. save(path) tüm kitapların format çıktısını satır satır dosyaya yazar; load(path) dosyayı okur ve içeriğini dize olarak döndürür. Böylece kütüphane verisi dosyada kalıcı hale gelir.
fun save(path: String) {
val content = books.joinToString("\n") { it.format() }
File(path).writeText(content)
}
fun load(path: String): String = File(path).readText()
joinToString her kitabın format çıktısını \n ile birleştirir. writeText sonucu dosyaya yazar; readText tüm içeriği geri okur. File sınıfı java.io.File'dan gelir; bu yüzden import java.io.File gerekir. Büyük kütüphanelerde bu yaklaşım yerine satır satır okuma tercih edilebilir.
save ve load deseni
save ve load bir birlikte çalışır: save veriyi dosyaya yazar, load dosyadan geri okur. Bu, veriyi program çalışmaları arasında kalıcı yapmak için kullanışlıdır. Dosya yolu bir dize olarak verilir; göreli yol çalışma dizinine göre çözümlenir.
val lib = Library()
lib.add(Book("Suç ve Ceza", "Dostoyevski", 1866, Fiction))
lib.save("kutuphane.txt")
println(lib.load("kutuphane.txt"))
Burada kitap eklenir, save ile dosyaya yazılır, sonra load ile geri okunur. Çıktı, dosyaya yazılan format çıktılarıdır. Bu desen, küçük veri tabanlı uygulamalarda yaygındır. Daha karmaşık veri için JSON veya CSV biçimi tercih edilebilir; ileride işlenecek bir konudur.
Uygulama save ve load metotlarını ekle
Hazır koddaki Book, Category ve Library tanımları hazır (Library'de add ve listAll var). Sen Library sınıfına iki metot ekle: fun save(path: String) gövdesi books.joinToString("\n") { it.format() } ile içeriği birleştirip File(path).writeText(content) ile yazsın. fun load(path: String): String gövdesi File(path).readText() döndürsün. main içinde val lib = Library() oluştur; iki kitap ekle; lib.save("kutuphane.txt") çağır; println(lib.load("kutuphane.txt")) yazdır. import java.io.File importunu dosyanın en üstüne ekle.
Örnek çözümü göster
import java.io.File
data class Book(val title: String, val author: String, val year: Int, val category: Category) {
fun format(): String = "$title - $author ($year) [${category.label()}]"
}
sealed class Category {
abstract fun label(): String
}
object Fiction : Category() {
override fun label() = "Roman"
}
object NonFiction : Category() {
override fun label() = "İnceleme"
}
class Library {
private val books = mutableListOf<Book>()
fun add(b: Book) { books.add(b) }
fun listAll(): List<Book> = books.toList()
fun save(path: String) {
val content = books.joinToString("\n") { it.format() }
File(path).writeText(content)
}
fun load(path: String): String {
return File(path).readText()
}
}
fun main() {
val lib = Library()
lib.add(Book("Suç ve Ceza", "Dostoyevski", 1866, Fiction))
lib.add(Book("Sapiens", "Harari", 2011, NonFiction))
lib.save("kutuphane.txt")
println(lib.load("kutuphane.txt"))
}
Kendini test et
-
save metodu dosyaya ne yazar?
- Yalnızca ilk kitabı
- Kitap sayısını
- Boş bir dize
- Her kitabın format çıktısını satır satır
Cevabı göster
Her kitabın format çıktısını satır satır — save, her kitabın format çıktısını joinToString ile birleştirip yazar.
-
Dosyaya yaz
File(path).____(content)
Cevabı göster
File(path).writeText(content)
-
save/load parçalarını eşle
- fun save(path)
- Yazma metodu
- fun load(path)
- Okuma metodu
- joinToString
- Birleştirme
- writeText
- Dosyaya yazar
Sıradaki ders: Birleştirme