يوفر Node خيارات مختلفة للكتابة إلى الملفات في نظامك من خلال المدمج في خ وحدة. وتشمل هذه writeFile (), appendFile ()، و createWriteStream ().
مثل العديد من اللغات ، يتيح لك Node.js الاختيار بين الكتابة فوق ملف موجود أو إلحاقه به. يجب عليك أيضًا التعرف على المفاضلات بين كتابة ملف دفعة واحدة وتدفقه.
باستخدام writeFile ()
writeFile () ربما تكون أسهل طريقة يمكنك استخدامها لكتابة ملف في Node.
fs.writeFile (اسم الملف ، البيانات ، رد الاتصال)
فيما يلي مثال يوضح كيفية إنشاء ملف نص عادي باستخدام writeFile (). يمكنك بالطبع أن تخلق أنواع الملفات الأخرى مثل CSV أو JSON.
مقدار ثابت خ = يتطلب("fs")
fs.writeFile ("test.txt"، "محتوى جديد" ، يخطئ => {
إذا (يخطئ) {
وحدة التحكم.log (يخطئ)
}
});
يدعم writeFile () async / await do بدلاً من استخدام عمليات الاسترجاعات كما في المثال أعلاه ، يمكنك إنشاء الملف على النحو التالي.
مقدار ثابت خ = يتطلبوعود
غير متزامنوظيفةالكتابة إلى ملف() {
محاولة {
انتظر fs.writeFile ("test.txt"، "متابعة جديدة")
} قبض على (يخطئ) {
وحدة التحكم.log (يخطئ) ؛
}
}
writeToFile ()
بشكل افتراضي ، تعمل writeFile () عن طريق استبدال محتويات الملف المحدد بمحتوى جديد إذا كان الملف موجودًا. ومع ذلك ، هناك علامات يمكنك استخدامها لتجاوز هذه الوظيفة مثل:
- ص + - يفتح الملف للقراءة والكتابة.
- ث + - يفتح الملف للقراءة والكتابة في بداية الملف
- أ - يفتح الملف المراد كتابته في نهاية الملف.
- أ + - يفتح الملف للقراءة والكتابة في نهاية الملف.
على سبيل المثال ، يمكنك استخدام علامة + مثل هذا:
مقدار ثابت خ = يتطلب("fs")
fs.writeFile ("test.txt"، "محتوى أحدث"، { علَم: "a +"} ، يخطئ => {
إذا (يخطئ) {
وحدة التحكم.log (يخطئ)
}
});
هناك العديد من علامات نظام الملفات الأخرى التي يمكنك التعرف عليها في ملف وثائق العقدة لوحدة fs.
ال خ وحدة توفر أيضا writeFileSync، ال نسخة متزامنة من writeFile ().
مقدار ثابت خ = يتطلب("fs")
fs.writeFileSync ("test.txt"، "محتوى أحدث"، { علَم: "a +"} ، يخطئ => {
إذا (يخطئ) {
وحدة التحكم.log (يخطئ)
}
});
باستخدام createWriteStream ()
الجانب السلبي من استخدام writeFile () هو أنه يجب عليك تخزين جميع محتويات الملف دفعة واحدة وهو أمر غير قابل للتطوير للملفات الكبيرة. createWriteStream () ومع ذلك ، يدعم الكتابة المتسلسلة. هذا يعني أنه يمكنك كتابة جزء واحد من البيانات إلى ملف في المرة الواحدة. هذا هو النظام العام لإنشاء دفق قابل للكتابة.
fs.createWriteStream (المسار ، الخيارات)
الكود أدناه يكتب البيانات إلى ملف نصي باستخدام التدفقات
مقدار ثابت خ = يتطلب("fs")
// إنشاء دفق قابل للكتابة
يترك writeableStream = fs.createWriteStream ("test.txt")
// اكتب إلى الملف باستخدام الدفق القابل للكتابة
writeableStream.write ("محتوى جديد") ؛
فيما يلي مثال آخر يوضح كيف يمكنك توجيه البيانات إلى التدفق القابل للكتابة. يقوم هذا البرنامج بكتابة جميع المدخلات من الجهاز إلى ملف test.txt طالما أن الجهاز مفتوح.
مقدار ثابت خ = يتطلب("fs")
يترك writableStream = fs.createWriteStream ("test.txt") ؛
process.stdin.pipe (writableStream) ؛
إذا قمت بتشغيل هذا البرنامج من سطر الأوامر ، فيمكنك إنهاءه باستخدام السيطرة + د أو السيطرة + ج.
يمكنك أيضًا الكتابة من ملف آخر إلى التدفق القابل للكتابة. خذ بعين الاعتبار المثال التالي:
مقدار ثابت خ = يتطلب("fs")
يترك readableStream = fs.createReadStream ("test.txt") ؛
يترك writableStream = fs.createWriteStream ("test2.txt") ؛
readableStream.on ("البيانات"، وظيفة(قطعة) {
writableStream.write (قطعة) ؛
});
يتيح لك إنشاء دفق قابل للقراءة من الملف الذي تريد نسخه قراءة محتوياته في أجزاء. لذلك لكل قطعة يتم استلامها ، سيكتب البرنامج إلى الملف الوجهة.
باستخدام appendFile ()
appendFile () هي طريقة مباشرة لإضافة محتوى إلى نهاية الملف. هنا مثال.
مقدار ثابت خ = يتطلب("fs")
fs.appendFile ("test.txt" ، "إضافة محتوى" ، يخطئ => {
إذا (يخطئ) {
وحدة التحكم. Error (يخطئ) ؛
}
});
يمكنك أيضًا استخدام غير متزامن / انتظار.
مقدار ثابت خ = يتطلبوعود
غير متزامنوظيفةappendToFile() {
محاولة {
انتظر fs.appendFile ("test.txt" ، "محتوى مضاف")
} قبض على (يخطئ) {
وحدة التحكم.log (يخطئ) ؛
}
}
appendToFile ()
يحب writeFile ()، يحتوي appendFile أيضًا على إصدار متزامن:
fs.appendFileSync ("test.txt" ، "محتوى مضاف") ؛
استخدم التدفقات لكتابة ملفات كبيرة
ناقشت هذه المقالة عدة طرق لكتابة الملفات في Node. على الرغم من أن writeFile () واضحة جدًا ، إلا أنها مناسبة بشكل أفضل لأحجام الملفات الصغيرة نظرًا لأنها لا تسمح بالكتابة المتسلسلة. إذا كنت تتعامل مع ملفات كبيرة ، فمن الأفضل استخدام تدفقات قابلة للكتابة.