از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
خواندن خط به خط فایل در Node.js اگر مدتی است با Node.js کار می کنید، مطمئنم که با اهمیت خواندن فایل ها آشنا هستید. چه در حال ساخت یک برنامه وب، یک اسکریپت کاربردی یا حتی یک برنامه دسکتاپ کامل باشید، خواندن فایل ها بخش مهمی از بسیاری از پروژه ها است. در برخی موارد، شما …
سرفصلهای مطلب
معرفی
اگر مدتی است که با Node.js کار می کنید، مطمئنم که با اهمیت خواندن فایل ها آشنا هستید. چه در حال ساخت یک برنامه وب، یک اسکریپت کاربردی یا حتی یک برنامه دسکتاپ کامل باشید، خواندن فایل ها بخش مهمی از بسیاری از پروژه ها است. در برخی موارد، حتی ممکن است نیاز داشته باشید که یک فایل را خط به خط بخوانید. این رویکرد می تواند به ویژه زمانی مفید باشد که در حال تجزیه چیزهایی مانند فایل های گزارش، پردازش مجموعه داده های بزرگ، یا صرفاً به دنبال استخراج اطلاعات خاص از یک فایل متنی هستید.
در این مقاله، روش خواندن خط به خط یک فایل در Node.js را بررسی خواهیم کرد. ما چند تکنیک را مرور خواهیم کرد، از استفاده از ماژولهای داخلی گرفته تا کتابخانههای شخص ثالث که تنها هدف آن دستیابی به هدف ما است. در پایان این راهنما، درک کاملی از روشهای مختلف خواندن فایلها به خط به خط در Node.js خواهید داشت و میتوانید بهترین روش را برای موارد استفاده خاص خود انتخاب کنید. بنابراین، بیایید شروع کنیم!
رویکردها
روش های مختلفی برای خواندن خط به خط یک فایل در Node.js وجود دارد. خوشبختانه، ما چند روش مختلف در اختیار داریم که هر کدام مزایا و معایب خاص خود را دارند. در این بخش، مروری بر این روشها و مقایسه عملکرد و سهولت استفاده آنها در اختیار شما قرار میدهیم تا بتوانید در مورد اینکه کدام رویکرد را انتخاب کنید، تصمیم آگاهانه بگیرید.
مروری بر روش ها
- ساخته شده است
fs
مدول: Node.js با یک ماژول داخلی به نام ارائه می شودfs
. می توانید استفاده کنیدfs
ماژول در ارتباط باreadline
ماژول برای خواندن یک فایل خط به خط. این روش به هیچ گونه وابستگی اضافی نیاز ندارد و برای اکثر سناریوها یک انتخاب عالی است. - کتابخانه های شخص ثالث: اگر به دنبال عملکرد اضافی یا یک API ساده تر هستید، ممکن است از یک کتابخانه شخص ثالث برای خواندن فایل ها خط به خط استفاده کنید. برخی از گزینه های محبوب عبارتند از
readline-sync
وline-reader
. این کتابخانه ها می توانند کار را ساده کنند process و ممکن است بسته به مزایای دیگری نیز ارائه دهد روی نیازهای شما.
با استفاده از داخلی fs
مدول
Node.js با یک ماژول داخلی به نام ارائه می شود fs
(مخفف «فایل سیستم») که انواع عملیات ورودی/خروجی فایل را فراهم می کند. در این بخش، روش استفاده از آن را به شما نشان خواهیم داد fs
ماژول در ارتباط با readline
ماژول برای خواندن یک فایل خط به خط.
این fs
ماژول بخش اصلی Node.js است و طیف وسیعی از روش ها را برای کار با سیستم فایل ارائه می دهد. این شامل خواندن، نوشتن، و اصلاح فایل ها و دایرکتوری ها می شود. این یک ابزار عالی برای مدیریت فایل ها در برنامه های Node شما است.
برای خواندن یک فایل خط به خط با استفاده از fs
و readline
ماژول ها، مراحل زیر را دنبال کنید:
- وارد کردن ماژول های مورد نیاز
اول، شما نیاز دارید import را fs
و readline
ماژول ها با استفاده از require
تابع:
const fs = require('fs');
const readline = require('readline');
- ایجاد یک جریان خواندنی
در مرحله بعد، یک جریان خواندن برای فایلی که می خواهید خط به خط بخوانید ایجاد کنید. این را می توان با استفاده از fs.createReadStream()
روش:
const fileStream = fs.createReadStream('path/to/your/file.txt');
- رسیدگی به رویدادها:
line
وclose
در نهایت، یک را ایجاد کنید readline
رابط با استفاده از readline.createInterface()
روش و پیوست شنوندگان رویداد برای line
و close
مناسبت ها:
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
rl.روی('line', (line) => {
console.log(`Line: ${line}`);
});
rl.روی('close', () => {
console.log('Finished reading the file.');
});
در اینجا کد نمونه کامل برای خواندن خط به خط یک فایل با استفاده از fs
و readline
ماژول ها:
const fs = require('fs');
const readline = require('readline');
const fileStream = fs.createReadStream('path/to/your/file.txt');
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
rl.روی('line', (line) => {
console.log(`Line: ${line}`);
});
rl.روی('close', () => {
console.log('Finished reading the file.');
});
در این مثال، ما با وارد کردن آن شروع می کنیم fs
و readline
ماژول ها سپس یک جریان خواندنی برای فایل ایجاد می کنیم و از آن برای ایجاد a استفاده می کنیم readline
رابط.
ما شنوندگان رویداد را برای line
و close
مناسبت ها. این line
رویداد برای هر خط در فایل منتشر می شود، و close
رویداد زمانی منتشر می شود که کل فایل خوانده شود.
درون line
شنونده رویداد، ما print خط فعلی به console. وقتی که close
رویداد راه اندازی می شود، ما یک پیام “خواندن فایل تمام شد” را وارد می کنیم.
استفاده از کتابخانه های شخص ثالث
گاهی اوقات، ماژول های داخلی ممکن است برای نیازهای شما مناسب نباشند، یا ممکن است به سادگی یک API ساده تر را ترجیح دهید. در این موارد، کتابخانه های شخص ثالث می توانند به کمک بیایند. بیایید نگاهی به یک گزینه محبوب بیندازیم: readline-sync
.
readline-sync
کتابخانه
برای شروع با خواندن-همگام سازی، ابتدا باید آن را از طریق npm نصب کنید. خودت را باز کن terminal و دستور زیر را اجرا کنید:
$ npm install readline-sync --save
این نصب و اضافه خواهد شد readline-sync
به وابستگی های پروژه شما
هنگامی که شما دارید readline-sync
نصب شده است، می توانید از آن برای خواندن خط به خط یک فایل به راحتی استفاده کنید. این کتابخانه یک API ساده و همزمان ارائه میکند که میتواند کد شما را خواناتر و راحتتر دنبال کند.
در اینجا مثالی از روش استفاده آورده شده است readline-sync
برای خواندن خط به خط یک فایل:
const fs = require('fs');
const readlineSync = require('readline-sync');
const filePath = 'path/to/your/file.txt';
const fileContent = fs.readFileSync(filePath, 'utf-8');
const lines = fileContent.split('\n');
for (const line of lines) {
console.log(`Line: ${line}`);
}
در این مثال، ما با درخواست کردن شروع می کنیم fs
و readline-sync
ماژول ها سپس مسیر فایلی که می خواهیم بخوانیم را مشخص می کنیم.
در مرحله بعد، محتوای فایل را با استفاده از آن می خوانیم fs.readFileSync()
و آن را با استفاده از خط به آرایه ای از خطوط تقسیم کنید split()
تابع. به خاطر داشته باشید که این روش کل فایل را در حافظه می خواند، که ممکن است برای فایل های خیلی بزرگ مناسب نباشد.
در نهایت از a استفاده می کنیم for...of
حلقه برای تکرار از طریق هر خط در lines
آرایه و print آن را به console. توجه داشته باشید که readline-sync
کتابخانه برای ارائه عملیات ورودی/خروجی همزمان طراحی شده است، بنابراین این مثال را خواهد خواند و process فایل خط به خط به صورت همزمان.
line-reader
کتابخانه
یکی دیگر از کتابخانه های شخص ثالث محبوب برای خواندن فایل ها خط به خط است خط خوان. این کتابخانه یک API ناهمزمان ارائه می دهد که می تواند برای مدیریت فایل های بزرگ یا زمانی که می خواهید از مسدود کردن رشته اصلی جلوگیری کنید مفید باشد.
برای شروع استفاده line-reader
، باید آن را از طریق نصب کنید npm
. خودت را باز کن terminal و دستور زیر را اجرا کنید:
$ npm install line-reader --save
این دستور نصب و اضافه می کند line-reader
به وابستگی های پروژه شما
وقتی نصب کردید line-reader
، می توانید از آن برای خواندن خط به خط یک فایل به صورت ناهمزمان استفاده کنید. API این کتابخانه بسیار ساده و برای استفاده آسان است، و آن را برای کسانی که رویکرد ناهمزمان را ترجیح می دهند، انتخابی عالی می کند.
در اینجا مثالی از روش استفاده آورده شده است line-reader
برای خواندن خط به خط یک فایل:
const lineReader = require('line-reader');
const filePath = 'path/to/your/file.txt';
lineReader.eachLine(filePath, (line, last, done) => {
console.log(`Line: ${line}`);
if (last) {
console.log('Finished reading the file.');
done();
}
});
در این مثال، ما با درخواست کردن شروع می کنیم line-reader
ماژول و تعیین مسیر فایلی که می خواهیم بخوانیم.
بعد، ما را صدا می زنیم lineReader.eachLine()
روش، عبور در filePath
و یک تابع تماس. تابع callback برای هر خط در فایل اجرا می شود. در پاسخ به تماس، ما به جریان دسترسی داریم line
، یک مقدار بولی last
نشان می دهد که آیا این آخرین خط در فایل است، و a done
تابعی که می توانیم برای توقف تکرار فراخوانی کنیم.
ما print خط فعلی به console و اگر خط آخر باشد، پیام «خواندن فایل تمام شد» را وارد کرده و با آن تماس میگیریم done()
تابع خروج از حلقه با استفاده از done
پاسخ به تماس، ما به روش اجازه می دهیم به صورت ناهمزمان کار کند و از مسدود کردن رشته اصلی که هنگام کار با فایل های بسیار بزرگ ضروری است، جلوگیری می کنیم. بدون این فراخوانی، متد به صورت همزمان اجرا می شود.
رسیدگی به خطاها و استثنائات
هنگام کار با فایلها به هر زبانی، مهم است که خطاها و استثناها را به درستی مدیریت کنید تا تجربه کاربری بهتری داشته باشید و پایداری برنامه خود را حفظ کنید. بدون این بررسیهای ایمنی و کنترلکنندههای خطا، برنامه ما ممکن است بسیار مستعد خراب شدن باشد.
در این بخش، برخی از خطاها و استثناهای رایجی که ممکن است در هنگام خواندن فایلها با آنها مواجه شوید، و همچنین تکنیکهای مناسب برای رسیدگی به آنها را بررسی میکنیم.
در زیر چند خطای رایج و استثنایی وجود دارد که ممکن است با آنها روبرو شوید:
- فایل پیدا نشد: زمانی اتفاق می افتد که مسیر فایل مشخص شده وجود نداشته باشد یا غیر قابل دسترسی باشد.
- مسائل مربوط به مجوز: این زمانی اتفاق می افتد که برنامه شما فاقد مجوزهای لازم برای خواندن فایل باشد.
- مسائل رمزگذاری: این موارد ممکن است هنگام خواندن فایل هایی با کدگذاری نویسه نادرست یا پشتیبانی نشده رخ دهد.
برای رسیدگی به این خطاها و استثناها، تکنیک های زیر را در نظر بگیرید:
- از بلوک های try-catch استفاده کنید: کد خواندن فایل خود را با بلوک های try-catch احاطه کنید تا استثناهایی را که ممکن است در حین اجرا اتفاق بیفتد را بگیرید.
- اعتبارسنجی مسیرهای فایل: قبل از اقدام به خواندن فایل، مطمئن شوید که مسیر فایل معتبر و قابل دسترسی است.
- مجوزها را بررسی کنید: بررسی کنید که برنامه شما دارای مجوزهای لازم برای خواندن فایل باشد.
- رسیدگی به خطاها در شنوندگان رویداد: هنگام استفاده از رویکردهای رویداد محور (مانند
fs
وreadline
ماژول ها)، خطاها را در شنوندگان رویداد مربوطه رسیدگی می کند.
در اینجا مثالی برای نشان دادن مدیریت خطا هنگام خواندن خط به خط فایل با استفاده از نشان داده شده است fs
و readline
ماژول ها:
const fs = require('fs');
const readline = require('readline');
const filePath = 'path/to/your/file.txt';
try {
if (!fs.existsSync(filePath)) {
throw new Error('File not found');
}
const fileStream = fs.createReadStream(filePath);
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
rl.روی('line', (line) => {
console.log(`Line: ${line}`);
});
rl.روی('close', () => {
console.log('Finished reading the file.');
});
rl.روی('error', (err) => {
console.error(`Error reading the file: ${err.message}`);
});
} catch (err) {
console.error(`Error: ${err.message}`);
}
در این مثال، ابتدا بررسی می کنیم که آیا مسیر فایل مشخص شده با استفاده از عبارت وجود دارد یا خیر fs.existsSync()
روش. اگر فایل وجود نداشته باشد، خطا می دهیم.
سپس یک جریان خواندن و a readline
رابط مانند قبل با این حال، ما یک شنونده رویداد “خطا” اضافه کردهایم تا خطاهایی را که ممکن است در حین خواندن رخ دهد کنترل کند. process.
در نهایت، کل بلوک کد را با یک دستور try-catch احاطه می کنیم تا استثناهایی را که ممکن است خارج از شنوندگان رویداد رخ دهد، به عنوان یک “catch all” در نظر بگیریم.
کارایی
هنگام کار با هر نوع ورودی/خروجی، ضروری است که پیامدهای عملکرد رویکرد خود را در نظر بگیرید. در اینجا، استفاده از بافر و حافظه، خواندن همزمان در مقابل ناهمزمان، و بهینه سازی خواندن فایل برای فایل های بزرگ را مورد بحث قرار خواهیم داد.
بافر و استفاده از حافظه
بافر است process ذخیره موقت داده ها در حافظه قبل از پردازش. هنگام خواندن فایلها، بافر میتواند بر میزان استفاده و عملکرد حافظه تأثیر بگذارد، بهویژه برای فایلهای بزرگ. هنگام استفاده از روش هایی که کل فایل را در حافظه می خوانند (مثلاً fs.readFileSync()
، ممکن است با محدودیت های حافظه یا خطاهای خارج از حافظه مواجه شوید.
برای کاهش مصرف حافظه، از روشهای پخش جریانی مانند استفاده کنید fs.createReadStream()
یا کتابخانه هایی که فایل ها را خط به خط می خوانند بدون اینکه کل فایل را در حافظه بارگذاری کنند.
همزمان در مقابل خواندن ناهمزمان
خواندن همزمان به این معنی است که کد شما قبل از انتقال، منتظر می ماند تا عملیات خواندن فایل کامل شود روی به خط بعدی کد. در حالی که این کار میتواند خواندن و درک کد شما را آسانتر کند، میتواند رشته اصلی را نیز مسدود کند، که منجر به مشکلات عملکرد، بهویژه برای فایلهای بزرگ یا آهستهخوان میشود.
خواندن ناهمزمان، روی از سوی دیگر، به کد شما اجازه می دهد تا زمانی که فایل در حال خواندن است، به اجرا ادامه دهد. این می تواند منجر به عملکرد بهتر و برنامه پاسخگوتر شود، به ویژه هنگام کار با فایل های بزرگ یا سیستم های فایل کند.
بهینه سازی برای فایل های بزرگ
هنگام کار با فایل های حجیم، بهینه سازی روش خواندن فایل می تواند عملکرد را تا حد زیادی بهبود بخشد. در اینجا چند نکته برای بهینه سازی خواندن فایل برای فایل های حجیم وجود دارد:
- از روش های استریم استفاده کنید: استفاده از روش هایی مانند
fs.createReadStream()
یا کتابخانه های شخص ثالث که فایل ها را خط به خط می خوانند بدون اینکه کل فایل را در حافظه بارگذاری کنند. این به کاهش استفاده از حافظه و در نتیجه کاهش عملکرد کمک می کند. - خواندن ناهمزمان را انتخاب کنید: روشهای خواندن ناهمزمان را برای جلوگیری از مسدود شدن رشته اصلی انتخاب کنید و به برنامه شما اجازه میدهد هنگام پردازش فایلهای بزرگ، پاسخگو باقی بماند.
- داده ها را به صورت تکه ای پردازش کنید: فایل خود را به تکه های کوچکتر بشکنید و process هر تکه جداگانه این می تواند به شما کمک کند استفاده از حافظه را به طور موثرتری مدیریت کنید و تأثیر آن را کاهش دهید روی کارایی.
با در نظر گرفتن این جنبه های عملکرد، می توانید مناسب ترین رویکرد را برای خواندن خط به خط فایل ها در Node.js انتخاب کنید و در عین حال از عملکرد بهینه و استفاده از منابع برای برنامه خود اطمینان حاصل کنید.
نتیجه
به طور خلاصه، ما چندین روش را برای خواندن خط به خط یک فایل در Node.js بررسی کرده ایم، از جمله استفاده از داخلی fs
ماژول با readline
ماژول، و همچنین کتابخانه های شخص ثالث مانند readline-sync
و line-reader
. هر رویکردی مزایا و معاوضههای خاص خود را دارد، بنابراین حتماً وقت خود را صرف انتخاب روشی کنید که به بهترین وجه متناسب با مورد خاص شما باشد.
به خاطر داشته باشید که بهترین روشها، مانند مدیریت صحیح خطا و در نظر گرفتن خواندن همزمان در مقابل ناهمزمان را دنبال کنید تا از تجربه خواندن فایل روان و کارآمد در برنامههای Node.js خود اطمینان حاصل کنید. با توجه به همه اینها، اکنون باید برای مقابله با طیف گسترده ای از وظایف خواندن فایل در پروژه های Node.js خود مناسب باشید.
(برچسبها برای ترجمه)# جاوا اسکریپت
منتشر شده در 1403-01-25 18:31:03