العمل مع نظام الملفات في Kotlin: من النظرية إلى التطبيق
\n\nالعمل مع نظام الملفات هو أحد المهام الأساسية التي يواجهها كل مطور. في Kotlin، بفضل تكامله الوثيق مع Java وإضافاته المريحة، تصبح إدارة الملفات والمجلدات بديهية وموجزة. في هذه المقالة، سنستعرض العمليات الرئيسية: إنشاء الملفات وقراءتها وكتابتها وحذفها، بالإضافة إلى العمل مع الدلائل. جميع الأمثلة مكتوبة بلغة Kotlin وجاهزة للاستخدام في مشاريعك.
\n\nالأساسيات: التوصيل والخطوات الأولى
\n\nلا يحتوي Kotlin على مكتبة منفصلة خاصة به للعمل مع نظام الملفات - فهو يستخدم بالكامل قوة java.io.File\n\n
import java.io.File\n\nfun main() {\n val file = File("example.txt")\n println(file.exists()) // false إذا لم يكن الملف موجودًا\n}\n\nالفئة الأساسية هي java.io.File. وهي تمثل تجريدًا لمسار ملف أو دليل، ليس بالضرورة موجودًا على القرص.
قراءة وكتابة الملفات في Kotlin
\n\nيقدم Kotlin طرقًا أنيقة للقراءة والكتابة، مما يلغي الحاجة إلى إدارة التدفقات وإغلاق الموارد يدويًا.
\n\nقراءة محتوى الملف بالكامل
\n\nأبسط طريقة هي استخدام الدالة readText(). فهي تقرأ الملف بأكمله في سلسلة نصية واحدة.
fun readEntireFile() {\n val file = File("data.txt")\n if (file.exists()) {\n val content: String = file.readText()\n println(content)\n } else {\n println("الملف غير موجود")\n }\n}\n\nإذا كان الملف كبيرًا، فمن الأفضل قراءته سطرًا بسطر:
\n\nfun readLines() {\n File("log.txt").useLines { lines ->\n lines.forEach { line ->\n println(line)\n }\n }\n // useLines تغلق التدفق تلقائيًا\n}\n\nالكتابة في ملف
\n\nللكتابة، استخدم writeText() (يعيد كتابة الملف) أو appendText() (يضيف في النهاية).
fun writeToFile() {\n val file = File("output.txt")\n file.writeText("مرحبًا، Kotlin!\\n")\n file.appendText("هذا هو السطر الثاني.")\n \n println(file.readText())\n // الإخراج:\n // مرحبًا، Kotlin!\n // هذا هو السطر الثاني.\n}\n\nللبيانات الأكثر تعقيدًا (مثل كتابة قائمة من السلاسل النصية)، من المناسب استخدام writeLines():
fun writeListOfLines() {\n val lines = listOf("السطر 1", "السطر 2", "السطر 3")\n File("list.txt").writeLines(lines)\n}\n\nإنشاء ونسخ وحذف الملفات والدلائل
\n\nإدارة هيكل الملفات هي مهمة شائعة أخرى. دعنا نستعرض العمليات الأساسية.
\n\nإنشاء الملفات والمجلدات
\n\nالطريقة createNewFile() تنشئ ملفًا جديدًا فارغًا إذا لم يكن موجودًا بالفعل. لإنشاء الدلائل، استخدم mkdir() (ينشئ المجلد الأخير فقط في المسار) أو mkdirs() (ينشئ جميع الدلائل الأصلية المفقودة).
fun createStructure() {\n val dir = File("my_project/src/main")\n if (dir.mkdirs()) {\n println("تم إنشاء الدليل: ${dir.absolutePath}")\n }\n \n val newFile = File(dir, "config.ini")\n if (newFile.createNewFile()) {\n println("تم إنشاء الملف: ${newFile.name}")\n }\n}\n\nالنسخ والنقل
\n\nهل لا توجد دالة مدمجة copyTo في Kotlin؟ في الواقع توجد! الطريقة copyTo() تسمح بنسخ الملفات بسهولة، بينما renameTo() تسمح بإعادة التسمية أو النقل.
fun copyAndMove() {\n val source = File("source.txt")\n val destination = File("backup/source_copy.txt")\n \n // النسخ\n source.copyTo(destination, overwrite = true)\n \n // الن