مقدمه
کار با فایلها چه در توسعه نرمافزار و چه در استفاده روزمره از کامپیوتر بسیار رایج است. کاربران معمولاً برای انجام کارهایی مثل ذخیره فایل دانلودشده یا استفاده از دادهها در برنامههای دیگر، فایلها را در پوشههای مختلف میخوانند و مینویسند. به همین شکل، یک برنامه بکاند یا ابزار خط فرمان (CLI) ممکن است برای ذخیره دادههای دانلودشده نیاز داشته باشد آنها را در فایل ذخیره کند، یا یک برنامه دادهمحور لازم داشته باشد اطلاعات را در قالبهای JSON، CSV یا Excel خروجی بگیرد. این برنامهها باید بتوانند با فایلسیستم سیستمعامل ارتباط برقرار کنند.
در Node.js میتوانید با استفاده از ماژول داخلی fs بهصورت برنامهنویسی فایلها را مدیریت کنید. نام fs مخفف “File System” است و شامل تمام توابع موردنیاز برای خواندن، نوشتن و حذف فایلها روی سیستم محلی میشود. همین قابلیت باعث شده جاوااسکریپت برای توسعه بکاند و ابزارهای خط فرمان نیز گزینه مناسبی باشد.
در این مقاله با استفاده از ماژول fs یاد میگیرید چگونه:
- یک فایل را بخوانید
- فایل جدید ایجاد کرده و در آن بنویسید
- فایل حذف کنید
- فایل را به پوشه دیگری منتقل کنید
ماژول fs از روشهای synchronous، asynchronous و stream برای کار با فایلها پشتیبانی میکند. در این آموزش روی API مبتنی بر Promise و async/await تمرکز میکنیم که رایجترین روش بین توسعهدهندگان Node.js است.
پیشنیازها
برای انجام این آموزش باید موارد زیر را داشته باشید:
- نصب بودن Node.js روی سیستم
- آشنایی اولیه با JavaScript Promise و async/await
- این آموزش با Node.js نسخه 10.22.0 تست شده است
مرحله اول — خواندن فایل با readFile()
در این بخش برنامهای مینویسید که فایلها را در Node.js بخواند.
ابتدا پوشه پروژه را بسازید:
mkdir node-files
وارد پوشه شوید:
cd node-files
یک فایل متنی ایجاد کنید:
echo "hello, hola, bonjour, hallo" > greetings.txt
سپس فایل جاوااسکریپت بسازید:
nano readFile.js
کد زیر را داخل فایل قرار دهید:
const fs = require('fs').promises;
async function readFile(filePath) {
try {
const data = await fs.readFile(filePath);
console.log(data.toString());
} catch (error) {
console.error(`Got an error trying to read the file: ${error.message}`);
}
}
readFile('greetings.txt');
اجرای فایل:
node readFile.js
خروجی:
hello, hola, bonjour, hallo
در این مثال:
- ماژول fs ایمپورت شده
- فایل با readFile() خوانده شده
- داده Buffer به متن تبدیل شده
مرحله دوم — نوشتن فایل با writeFile()
در این بخش فایل CSV میسازید و داده داخل آن ذخیره میکنید.
فایل جدید ایجاد کنید:
nano writeFile.js
کد زیر را وارد کنید:
const fs = require('fs').promises;
async function openFile() {
try {
const csvHeaders = 'name,quantity,price'
await fs.writeFile('groceries.csv', csvHeaders);
} catch (error) {
console.error(`Got an error trying to write to a file: ${error.message}`);
}
}
async function addGroceryItem(name, quantity, price) {
try {
const csvLine = `\n${name},${quantity},${price}`
await fs.writeFile('groceries.csv', csvLine, { flag: 'a' });
} catch (error) {
console.error(`Got an error trying to write to a file: ${error.message}`);
}
}
(async function () {
await openFile();
await addGroceryItem('eggs', 12, 1.50);
await addGroceryItem('nutella', 1, 4);
})();
اجرای فایل:
node writeFile.js
نمایش محتوای فایل:
cat groceries.csv
خروجی:
name,quantity,price
eggs,12,1.5
nutella,1,4
در اینجا:
- فایل CSV ساخته شده
- دادهها به فایل اضافه شدهاند
- از flag: ‘a’ برای append کردن استفاده شده
مرحله سوم — حذف فایل با unlink()
فایل جدید بسازید:
nano deleteFile.js
کد زیر را قرار دهید:
const fs = require('fs').promises;
async function deleteFile(filePath) {
try {
await fs.unlink(filePath);
console.log(`Deleted ${filePath}`);
} catch (error) {
console.error(`Got an error trying to delete the file: ${error.message}`);
}
}
deleteFile('groceries.csv');
اجرای فایل:
node deleteFile.js
خروجی:
Deleted groceries.csv
نکته مهم:
تابع unlink() فایل را بهصورت دائمی حذف میکند و فایل وارد سطل زباله نمیشود.
مرحله چهارم — انتقال فایل با rename()
ابتدا پوشه جدید بسازید:
mkdir test-data
یک کپی از فایل ایجاد کنید:
cp greetings.txt greetings-2.txt
فایل جدید:
nano moveFile.js
کد:
const fs = require('fs').promises;
async function moveFile(source, destination) {
try {
await fs.rename(source, destination);
console.log(`Moved file from ${source} to ${destination}`);
} catch (error) {
console.error(`Got an error trying to move the file: ${error.message}`);
}
}
moveFile('greetings-2.txt', 'test-data/salutations.txt');
اجرای فایل:
node moveFile.js
خروجی:
Moved file from greetings-2.txt to test-data/salutations.txt
بررسی فایل:
ls test-data
خروجی:
salutations.txt
تابع rename() میتواند:
- فایل را تغییرنام دهد
- فایل را جابهجا کند
- هر دو کار را همزمان انجام دهد
جمعبندی
در این آموزش یاد گرفتید چگونه با ماژول fs در Node.js فایلها را مدیریت کنید:
- خواندن فایل با
readFile() - ساخت و نوشتن فایل با
writeFile() - حذف فایل با
unlink() - جابهجایی و تغییرنام فایل با
rename()
کار با فایلها یکی از مهمترین قابلیتهای Node.js در توسعه بکاند و ابزارهای CLI محسوب میشود و ماژول fs امکانات کاملی برای مدیریت فایلها در اختیار توسعهدهندگان قرار میدهد.
از همراهی شما با پارمین کلود سپاسگزاریم.
نظرات کاربران