العمل مع الملفات ونظام الملفات في Kotlin: من المبتدئ إلى المحترف

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا العمل مع الملفات في Kotlin ليس مؤلماً

\n\n

تخيل: أنت تكتب تطبيقاً يجب أن يحفظ إعدادات المستخدم، أو يسجل الأخطاء، أو يعالج ملفات CSV بآلاف الأسطر. في Java، هناك عشرات الفئات مثل BufferedReader و FileWriter وكتل try-catch لا نهائية. وماذا عن Kotlin؟ اللغة التي طورتها JetBrains لا "تبسط" Java فحسب، بل تعيد تصور العمل مع البيانات. هنا، تُفتح الملفات بسطر واحد، وتُعالج الأخطاء بأناقة.

\n\n

في هذه المقالة، سنتناول العمل مع الملفات ونظام الملفات في Kotlin من العمليات الأساسية إلى التقنيات المتقدمة. ستتعلم كيفية قراءة وكتابة الملفات، وإدارة المجلدات، والعمل مع JSON و CSV، وتجنب الأخطاء الشائعة. هل أنت مستعد؟ هيا بنا!

\n\n

الأساسيات: كيف يبسط Kotlin Java IO

\n\n

الميزة الرئيسية في Kotlin هي دوال الامتداد (extension functions). بدلاً من كتابة عشرات الأسطر لقراءة ملف، تستخدم دالة واحدة مثل .readText() أو .readLines(). دعنا نلقي نظرة على أمثلة محددة.

\n\n

قراءة الملف بالكامل

\n

أبسط طريقة لقراءة ملف نصي هي استخدام readText(). هذه الدالة ترجع سلسلة نصية تحتوي على محتوى الملف. هام: سيتم إغلاق الملف تلقائياً بعد القراءة.

\n\n
import java.io.File\n\nfun main() {\n    val content = File("example.txt").readText()\n    println(content)\n}
\n\n

إذا كان الملف كبيراً، فمن الأفضل قراءته سطراً سطراً:

\n\n
val lines = File("example.txt").readLines()\nlines.forEach { line -> println(line) }
\n\n

وإذا كنت بحاجة للقراءة كتيار (على سبيل المثال، لمعالجة سجلات كبيرة):

\n\n
File("example.txt").useLines { lines ->\n    lines.forEach { line ->\n        // معالجة كل سطر\n        println(line)\n    }\n}
\n\n

لاحظ استخدام useLines() - وهي دالة تضمن إغلاق المورد بعد انتهاء الكتلة. تبدو سحرية، لكنها تعمل مثل try-with-resources في Java، ولكن بشكل أقصر.

\n\n

الكتابة في ملف

\n

الكتابة في Kotlin بديهية أيضاً. إليك ثلاثة خيارات:

\n\n
// 1. استبدال محتوى الملف\nFile("output.txt").writeText("مرحباً، أيها العالم!")\n\n// 2. الإضافة إلى نهاية الملف\nFile("output.txt").appendText("سطر جديد\\n")\n\n// 3. كتابة قائمة من الأسطر\nval list = listOf("سطر1", "سطر2", "سطر3")\nFile("output.txt").writeText(list.joinToString("\\n"))
\n\n

بالمناسبة، إذا كنت تعمل مع بيانات ثنائية (صور، أرشيفات)، استخدم writeBytes() و readBytes():

\n\n
val imageBytes = File("image.png").readBytes()\n// معالجة البايتات...\nFile("copy.png").writeBytes(imageBytes)
\n\n

إدارة نظام الملفات: إنشاء، حذف، نقل

\n\n

Kotlin لا يعيد اختراع العجلة، لكنه يجعل العمل مع نظام الملفات أكثر سهولة. جميع العمليات متاحة عبر الفئة java.io.File مع الإضافات.

\n\n

إنشاء المجلدات

\n

لإنشاء مجلد (وجميع المجلدات الأصلية إذا لم تكن موجودة):

\n\n
val dir = File("data/logs/2024")\nval created = dir.mkdirs() // يرجع true إذا تم الإنشاء\nprintln("تم إنشاء المجلد: $created")
\n\n

لاحظ: mkdir() ينشئ المجلد الأخير فقط، بينما mkdirs() ينشئ السلسلة بأكملها.

\n\n

التحقق من الوجود والحذف

\n\n
val file = File("temp.txt")\nif (file.exists()) {\n    if (file.delete()) {\n        println("تم حذف الملف")\n    } else {\n        println("فشل الحذف")\n    }\n}\n\n// حذف مجلد بشكل متكرر\nFile("data").deleteRecursively()
\n\n

كن حذراً مع deleteRecursively() - فهي عملية لا رجعة فيها. تحقق مرتين من أنك تحذف البيانات الصحيحة.

\n\n

النقل والنسخ

\n\n
val source = File("old.txt")\nval target = File("new_dir/new.txt")\n\n// النقل (إعادة                

المدونات

توصيات الكتب