CodeBlanks Logo Icon CodeBlanks

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.

Başlangıç kodu

Main.kt
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()
}

// Library'ye save(path: String) ekle: her kitabın format çıktısını satır satır dosyaya yaz
// load(path: String): String ekle: dosyayı oku ve içeriğini döndür
// main: iki kitap ekle, save("kutuphane.txt") çağır, load ile oku ve println ile yazdır
fun main() {
    // buraya yaz
}

Örnek çözüm

Main.kt
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"))
}

Beklenen çıktı

Suç ve Ceza - Dostoyevski (1866) [Roman]
Sapiens - Harari (2011) [İnceleme]

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 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 Doğru cevap

Açıklama: save, her kitabın format çıktısını joinToString ile birleştirip yazar.

2 Dosyaya yaz

Soru
File(path).____(content)
Cevap
File(path).writeText(content)

Açıklama: writeText verilen dizeyi dosyaya yazar.

3 save/load parçalarını eşle

Kavram Anlamı
fun save(path) Yazma metodu
fun load(path) Okuma metodu
joinToString Birleştirme
writeText Dosyaya yazar

Orta seviye bölümündeki tüm dersler