Middle
Ինչպես աշխատել ֆայլերով և մուտք/ելք (I/O) հոսքերով Kotlin-ում?
sobes.tech AI
Պատասխան AI-ից
Կոտլինի ստանդարտ գրադարանն ապահովում է հարմար ընդլայնումներ I/O-ի հետ աշխատանքի համար, պարզեցնելով java.io-ի հետ փոխազդեցությունը:
Հիմնական մոտեցումներ և դասեր:
-
Ֆայլից ընթերցում:
File.readBytes(): Կարդում է ֆայլի բովանդակությունը բայթների զանգվածի մեջ:File.readText(): Կարդում է ֆայլի բովանդակությունը որպես տող (կոդավորումը հաշվի առնելով):File.forEachLine { ... }: Հետամշակում է ֆայլի յուրաքանչյուր տող:File.bufferedReader(): Ստեղծում էBufferedReader՝ տողային ընթերցման համար:File.inputStream(): Ստեղծում էInputStream՝ բայթների ընթերցման համար:
-
Ֆայլին գրառում:
File.writeBytes(bytes): Գրում է բայթների զանգվածը ֆայլում:File.writeText(text, append): Գրում է տողը ֆայլում,append = trueավելացնում է վերջում:File.printWriter(): Ստեղծում էPrintWriter՝ ձևաչափված տեքստի համար:File.outputStream(): Ստեղծում էOutputStream՝ բայթների գրառման համար:
-
Հոսքերի հետ աշխատում:
InputStream.bufferedReader(): Օղակավորում էInputStream-ըBufferedReader-ով:OutputStream.printWriter(): Օղակավորում էOutputStream-ըPrintWriter-ով:copyTo(outputStream): ընդլայնման ֆունկցիա՝ հոսքերի բովանդակությունը պատճենելու համար:
-
Ռեսուրսների կառավարում (closures):
use { ... }ընդլայնումները ապահովում են հոսքերի և ընթերցողների/գրողների ավտոմատ փակումը, նույնիսկ արտահայտությունների դեպքում:
import java.io.File
fun main() {
val file = File("my_file.txt")
// Գրառում ֆայլում
file.writeText("Բարև, Kotlin I/O!")
file.appendText("\nշարքի շարունակություն.")
// Ստորագրի ընթերցում
file.forEachLine { line ->
println(line)
}
// Բոլոր ֆայլի բովանդակությունը որպես տող
val content = file.readText()
println("\nԲոլոր բովանդակությունը:")
println(content)
// BufferedReader-ով use-ով
file.bufferedReader().use { reader ->
reader.lines().forEach(::println) // Java Stream API-ով ընթերցում
}
// Ֆայլի պատճենում
val newFile = File("my_file_copy.txt")
file.inputStream().use { input ->
newFile.outputStream().use { output ->
input.copyTo(output) // հարմար պատճենում
}
}
}
Որոշ մեթոդների համեմատական աղյուսակ:
| մեթոդը | նպատակը | տվյալների տիպը | տող-տող/ամբողջ | նշում |
|---|---|---|---|---|
readBytes() |
ընթերցում բայթերով | ByteArray |
ամբողջական | հարմար է բինարային տվյալների համար |
readText() |
ընթերցում որպես տող | String |
ամբողջական | հարմար է տեքստային ֆայլերի համար |
forEachLine { } |
յուրաքանչյուր տող մշակելիս | String |
տող-տող | իդեալական մեծ տեքստային ֆայլերի համար |
bufferedReader() |
բուֆերային ընթերցող ստեղծել | N/A | հոսքային | ճկուն վերահսկում, պահանջում է use |
writeBytes() |
բայթների գրառում | ByteArray |
ամբողջական | հարմար է բինարային տվյալների համար |
writeText() |
տող գրանցել | String |
ամբողջական/ավելացնել | հարմար է տեքստային ֆայլերի համար |
printWriter() |
ձևաչափված գրիչ ստեղծել | N/A | հոսքային | հարմար է ձևաչափված արտածման համար, պահանջում է use |
use { ... } օգտագործումը կարևոր է Kotlin- ում անվտանգ I/O աշխատանքի համար, ապահովելով ռեսուրսների ազատում։ Kotlin ընդլայնում է առկա Java դասերը (File, InputStream, OutputStream և այլն) հարմարավետ ֆունկցիաներով։