Middle
როგორ მუშაობთ ფაილებთან და შესვლის/გამოსვლის (I/O) ნაკადებთან Kotlin-ში?
sobes.tech AI
პასუხი AI-სგან
Kotlin-ის სტანდარტული ბიბლიოთეკა უზრუნველყოფს მოსახერხებელ გაფართოებებს 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 { ... } არის ძირითადი უსაფრთხო მუშაობისთვის I/O-ში Kotlin-ში, გარანტიას იძლევა რესურსების გათავისუფლებაზე. Kotlin გაფართოებს არსებული Java კლასებს (File, InputStream, OutputStream და ა.შ.) მოსახერხებელი ფუნქციებით.