Sobes.tech
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 და ა.შ.) მოსახერხებელი ფუნქციებით.