العمل مع نظام الملفات في Node.js: دليل شامل

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

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

ابدأ الدورة

العمل مع نظام الملفات في Node.js: دليل شامل



في تطوير الويب الحديث، تعد القدرة على العمل بكفاءة مع نظام الملفات واحدة من المهارات الأساسية لمطور backend. يوفر Node.js وحدة fs (File System) قوية ومرنة، والتي تتيح تنفيذ جميع العمليات الأساسية مع الملفات والمجلدات: القراءة، الكتابة، الحذف، إعادة التسمية، وغيرها الكثير. في هذه المقالة، سنشرح بالتفصيل كيفية العمل مع نظام الملفات في Node.js، وسنستعرض الطرق المتزامنة وغير المتزامنة، بالإضافة إلى دراسة العمل مع المسارات.



استيراد وحدة fs والمبادئ الأساسية



للبدء في العمل مع نظام الملفات في Node.js، يجب استيراد الوحدة المدمجة fs. يتم ذلك بسطر واحد من الكود:



const fs = require('fs');


توفر وحدة fs طرقًا متزامنة وغير متزامنة. الطرق غير المتزامنة، كقاعدة عامة، تأخذ دالة callback كوسيطة أخيرة، وهي مفضلة في كود production لأنها لا تمنع event loop. الطرق المتزامنة تنتهي بـ Sync ويمكن أن تكون مفيدة أثناء تهيئة التطبيق أو في البرامج النصية.



بالإضافة إلى ذلك، ابتداءً من Node.js 10، أصبح العمل مع fs/promises متاحًا — وهي نسخة من الطرق التي تُرجع promises:



const fs = require('fs/promises');


في هذه المقالة، سنستخدم بشكل أساسي النهج غير المتزامن مع promises، لأنه الأكثر حداثة وراحة.



قراءة الملفات في Node.js



قراءة الملفات هي واحدة من أكثر العمليات شيوعًا. دعنا نستعرض ثلاث طرق رئيسية.



قراءة الملف بأكمله مرة واحدة (غير متزامن)



الطريقة fs.readFile() تقرأ محتوى الملف بالكامل في الذاكرة. هذا مناسب للملفات الصغيرة.



const fs = require('fs/promises');

async function readFileExample() { try { const data = await fs.readFile('example.txt', 'utf8'); console.log('محتوى الملف:', data); } catch (err) { console.error('خطأ في قراءة الملف:', err); }}

readFileExample();


قراءة الملف سطرًا بسطر (قراءة تدفقية)



بالنسبة للملفات الكبيرة، من الأفضل استخدام التدفقات (streams) أو قراءة الملف سطرًا بسطر باستخدام readline:



const fs = require('fs');const readline = require('readline');

async function readFileLineByLine() { const fileStream = fs.createReadStream('large-file.txt'); const rl = readline.createInterface({ input: fileStream, crlfDelay: Infinity });

for await (const line of rl) { console.log('سطر:', line); }}

readFileLineByLine();


القراءة المتزامنة



إذا كنت بحاجة لقراءة ملف فورًا وكنت مستعدًا لمنع التنفيذ:



const fs = require('fs');

try { const data = fs.readFileSync('example.txt', 'utf8'); console.log(data);} catch (err) { console.error(err);}


الكتابة وتحديث الملفات



يوفر Node.js عدة طرق لكتابة البيانات إلى الملفات.



الكتابة في ملف (استبدال)



الطريقة fs.writeFile() تنشئ ملفًا جديدًا أو تستبدل ملفًا موجودًا:



const fs = require('fs/promises');

async function writeFileExample() { try { await fs.writeFile('output.txt', 'مرحبًا، أيها العالم!', 'utf8'); console.log('تمت كتابة الملف بنجاح'); } catch (err) { console.error('خطأ في الكتابة:', err); }}

writeFileExample();


إضافة بيانات إلى نهاية الملف



إذا كنت بحاجة لإضافة بيانات دون حذف الموجودة، استخدم fs.appendFile():



const fs = require('fs/promises');

async function appendToFile() { try { await fs.appendFile('log.txt', `إدخال جديد: ${new Date()}`); console.log('تمت إضافة البيانات'); } catch (err) { console.error('خطأ:', err); }

المدونات

توصيات الكتب