Middle
Kotlin'de dosyalar ve giriş/çıkış (I/O) akışlarıyla nasıl çalışılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Kotlin standart kütüphanesi, java.io ile etkileşimi basitleştiren kullanışlı genişletmeler sağlar.
Ana yaklaşımlar ve sınıflar:
-
Dosya okuma:
File.readBytes(): Dosya içeriğini bayt dizisi olarak okur.File.readText(): Dosya içeriğini bir dize olarak okur (kodlama dikkate alınarak).File.forEachLine { ... }: Dosyanın her satırını işler.File.bufferedReader(): Satır satır okuma içinBufferedReaderoluşturur.File.inputStream(): Bayt okuma içinInputStreamoluşturur.
-
Dosyaya yazma:
File.writeBytes(bytes): Bayt dizisini dosyaya yazar.File.writeText(text, append): Bir dizeyi dosyaya yazar.append = truesona eklemek için.File.printWriter(): Biçimlendirilmiş metin yazmak içinPrintWriteroluşturur.File.outputStream(): Bayt yazmak içinOutputStreamoluşturur.
-
Akışlarla çalışma:
InputStream.bufferedReader(): BirInputStreamiBufferedReaderile sarmalar.OutputStream.printWriter(): BirOutputStreamiPrintWriterile sarmalar.- İçeriği kopyalamak için
copyTo(outputStream)genişletme fonksiyonları.
-
Kaynak yönetimi (closure):
use { ... }genişletme fonksiyonları, akışları ve okuyucuları/yazıcıları otomatik olarak kapatır, hatta istisnalar durumunda bile.
import java.io.File
fun main() {
val file = File("my_file.txt")
// Dosyaya yazma
file.writeText("Merhaba, Kotlin I/O!")
file.appendText("\nDevam eden satır.")
// Satır satır okuma
file.forEachLine { line ->
println(line)
}
// Tüm içeriği metin olarak okuma
val content = file.readText()
println("\nDosya içeriği:")
println(content)
// bufferedReader kullanımı ve `use`
file.bufferedReader().use { reader ->
reader.lines().forEach(::println) // Java Stream API ile okuma
}
// Dosyayı kopyalama
val newFile = File("my_file_copy.txt")
file.inputStream().use { input ->
newFile.outputStream().use { output ->
input.copyTo(output) // Kullanışlı kopyalama
}
}
}
Bazı metodların karşılaştırmalı tablosu:
| Metod | Amaç | Veri tipi | Satır satır/tüm | Notlar |
|---|---|---|---|---|
readBytes() |
Bayt olarak okuma | ByteArray |
Tüm | İkili veriler için uygun |
readText() |
Metin olarak okuma | String |
Tüm | Metin dosyaları için kullanışlı |
forEachLine { } |
Her satırı işleme | String |
Satır satır | Büyük metin dosyaları için ideal |
bufferedReader() |
Buffer'lı okuyucu oluşturma | N/A | Akış | Esnek kontrol, use gerektirir |
writeBytes() |
Bayt yazma | ByteArray |
Tüm | İkili veriler için uygun |
writeText() |
Metin yazma | String |
Tüm/ekleme | Metin dosyaları için kullanışlı |
printWriter() |
Biçimlendirilmiş yazar oluşturma | N/A | Akış | Biçimlendirilmiş çıktı için kullanışlı, use gerektirir |
use { ... } kullanımı, Kotlin'de I/O ile güvenli çalışmak için anahtardır ve kaynakların serbest bırakılmasını garanti eder. Kotlin, mevcut Java sınıflarını (File, InputStream, OutputStream vb.) kullanışlı fonksiyonlarla genişletir.