Node.js-এ ফাইল সিস্টেম অপারেশনগুলি পরিচালনা করার জন্য fs (File System) মডিউল ব্যবহৃত হয়। এই মডিউলটি সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস উভয় পদ্ধতিতেই ফাইলের সাথে সম্পর্কিত বিভিন্ন কাজ করতে সাহায্য করে, যেমন ফাইল পড়া, লেখালেখি, ফাইল তৈরি করা, ফাইল মুছে ফেলা ইত্যাদি।
এখানে আমরা fs মডিউলের কিছু সাধারণ অপারেশন নিয়ে আলোচনা করব।
১. ফাইল পড়া (Reading Files)
Node.js fs.readFile() ফাংশন ব্যবহার করে ফাইল পড়তে পারে। এটি অ্যাসিনক্রোনাস এবং সিঙ্ক্রোনাস দু'ভাবেই কাজ করতে পারে।
অ্যাসিনক্রোনাস ফাংশন:
const fs = require('fs');
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) {
console.error('Error reading file:', err);
} else {
console.log('File content:', data);
}
});এখানে example.txt ফাইলটি utf8 এনকোডিংয়ের মাধ্যমে পড়া হবে এবং কন্টেন্ট কনসোলে প্রদর্শিত হবে। যদি কোনো সমস্যা হয়, তবে এরর মেসেজ প্রদর্শিত হবে।
সিঙ্ক্রোনাস ফাংশন:
const fs = require('fs');
try {
const data = fs.readFileSync('example.txt', 'utf8');
console.log('File content:', data);
} catch (err) {
console.error('Error reading file:', err);
}এখানে readFileSync() ব্যবহার করা হয়েছে, যা সিঙ্ক্রোনাস পদ্ধতিতে ফাইলটি পড়বে। এটি ফাইলটি পড়ে নেয়ার পর পরবর্তী কোড চালাবে।
২. ফাইল লেখা (Writing Files)
Node.js এ fs.writeFile() বা fs.writeFileSync() ব্যবহার করে নতুন ফাইল তৈরি বা একটি এক্সিস্টিং ফাইলের কন্টেন্ট লেখা যায়।
অ্যাসিনক্রোনাস ফাংশন:
const fs = require('fs');
const data = 'Hello, Node.js!';
fs.writeFile('output.txt', data, 'utf8', (err) => {
if (err) {
console.error('Error writing file:', err);
} else {
console.log('File written successfully!');
}
});এখানে, output.txt ফাইলে Hello, Node.js! লেখা হবে। অ্যাসিনক্রোনাসভাবে কাজ করার জন্য কলব্যাক ফাংশন ব্যবহৃত হয়েছে।
সিঙ্ক্রোনাস ফাংশন:
const fs = require('fs');
const data = 'Hello, Node.js!';
try {
fs.writeFileSync('output.txt', data, 'utf8');
console.log('File written successfully!');
} catch (err) {
console.error('Error writing file:', err);
}এখানে writeFileSync() ব্যবহার করা হয়েছে, যা সিঙ্ক্রোনাসভাবে ফাইলটি লেখে।
৩. ফাইল মুছে ফেলা (Deleting Files)
ফাইল মুছে ফেলতে fs.unlink() বা fs.unlinkSync() ফাংশন ব্যবহার করা হয়।
অ্যাসিনক্রোনাস ফাংশন:
const fs = require('fs');
fs.unlink('output.txt', (err) => {
if (err) {
console.error('Error deleting file:', err);
} else {
console.log('File deleted successfully!');
}
});সিঙ্ক্রোনাস ফাংশন:
const fs = require('fs');
try {
fs.unlinkSync('output.txt');
console.log('File deleted successfully!');
} catch (err) {
console.error('Error deleting file:', err);
}এখানে unlink() এবং unlinkSync() ফাংশন ব্যবহৃত হয়েছে ফাইল মুছে ফেলার জন্য।
৪. ফোল্ডার তৈরি (Creating Directories)
Node.js এ ফোল্ডার তৈরি করতে fs.mkdir() বা fs.mkdirSync() ফাংশন ব্যবহার করা হয়।
অ্যাসিনক্রোনাস ফাংশন:
const fs = require('fs');
fs.mkdir('newFolder', (err) => {
if (err) {
console.error('Error creating directory:', err);
} else {
console.log('Directory created successfully!');
}
});সিঙ্ক্রোনাস ফাংশন:
const fs = require('fs');
try {
fs.mkdirSync('newFolder');
console.log('Directory created successfully!');
} catch (err) {
console.error('Error creating directory:', err);
}এখানে mkdir() এবং mkdirSync() ফাংশন ফোল্ডার তৈরি করার জন্য ব্যবহৃত হয়েছে।
৫. ফোল্ডার অপসারণ (Removing Directories)
Node.js এ ফোল্ডার অপসারণ করতে fs.rmdir() বা fs.rmdirSync() ফাংশন ব্যবহার করা হয়।
অ্যাসিনক্রোনাস ফাংশন:
const fs = require('fs');
fs.rmdir('newFolder', (err) => {
if (err) {
console.error('Error removing directory:', err);
} else {
console.log('Directory removed successfully!');
}
});সিঙ্ক্রোনাস ফাংশন:
const fs = require('fs');
try {
fs.rmdirSync('newFolder');
console.log('Directory removed successfully!');
} catch (err) {
console.error('Error removing directory:', err);
}৬. ফাইলের তথ্য পাওয়া (Getting File Information)
ফাইলের তথ্য পেতে fs.stat() বা fs.statSync() ব্যবহার করা হয়।
উদাহরণ:
const fs = require('fs');
fs.stat('example.txt', (err, stats) => {
if (err) {
console.error('Error retrieving file stats:', err);
} else {
console.log('File stats:', stats);
}
});এখানে stats অবজেক্টে ফাইলের তথ্য যেমন সাইজ, তৈরি হওয়ার সময়, ফাইল প্রকার ইত্যাদি পাওয়া যাবে।
৭. ফাইলের কপি (Copying Files)
ফাইল কপি করার জন্য fs.copyFile() বা একটি থার্ড-পার্টি লাইব্রেরি ব্যবহার করতে হয়, কারণ Node.js এর নিজস্ব মডিউলে ফাইল কপি করার সরাসরি কোনো পদ্ধতি নেই।
উদাহরণ (with fs.copyFile()):
const fs = require('fs');
fs.copyFile('source.txt', 'destination.txt', (err) => {
if (err) {
console.error('Error copying file:', err);
} else {
console.log('File copied successfully!');
}
});সারাংশ
Node.js এর fs (File System) মডিউল ফাইল সিস্টেমের সাথে কাজ করতে অত্যন্ত শক্তিশালী এবং অ্যাসিনক্রোনাস বা সিঙ্ক্রোনাস পদ্ধতিতে ফাইলের সাথে ইন্টারঅ্যাকশন করতে সহায়তা করে। আপনি সহজেই ফাইল পড়া, লেখা, মুছে ফেলা, ফোল্ডার তৈরি বা মুছে ফেলা এবং ফাইলের তথ্য পাওয়ার মতো কাজগুলো করতে পারবেন। Node.js এর এই ফাইল সিস্টেম অপারেশনগুলি সার্ভার সাইড অ্যাপ্লিকেশনে ফাইল ম্যানিপুলেশন এবং ডেটা স্টোরেজের জন্য প্রয়োজনীয় ফিচার প্রদান করে।
Node.js এর fs (File System) মডিউল ব্যবহার করে ফাইল এবং ডিরেক্টরি সম্পর্কিত বিভিন্ন অপারেশন করা যায়, যেমন ফাইল পড়া, লেখা, মুছে ফেলা, ডিরেক্টরি তৈরি করা, এবং আরও অনেক কিছু। এই মডিউলটি সিনক্রোনাস (blocking) এবং আসিনক্রোনাস (non-blocking) ফাংশনালিটি সরবরাহ করে, যার মাধ্যমে আপনি ইফেক্টিভলি ফাইল অপারেশন করতে পারেন।
১. ফাইল পড়া (Reading Files)
Node.js এ ফাইল পড়ার জন্য fs.readFile() এবং fs.readFileSync() দুটি পদ্ধতি ব্যবহার করা যেতে পারে। readFile() আসিনক্রোনাস, এবং readFileSync() সিনক্রোনাস।
a. Asynchronous File Read (আসিনক্রোনাস ফাইল পড়া)
const fs = require('fs');
// ফাইল পড়া (Asynchronous)
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) {
console.log('Error reading file:', err);
return;
}
console.log('File content:', data);
});এখানে, fs.readFile() ফাংশনটি আসিনক্রোনাস, তাই এটি একটি কলব্যাক ফাংশন গ্রহণ করে যা ফাইল পড়া সম্পন্ন হওয়ার পর চালানো হয়।
b. Synchronous File Read (সিনক্রোনাস ফাইল পড়া)
const fs = require('fs');
// ফাইল পড়া (Synchronous)
try {
const data = fs.readFileSync('example.txt', 'utf8');
console.log('File content:', data);
} catch (err) {
console.log('Error reading file:', err);
}এখানে, fs.readFileSync() ফাংশনটি সিনক্রোনাস, তাই এটি ফাইলের ডেটা পড়ে এবং অবরুদ্ধ (blocking) অবস্থায় অপেক্ষা করে।
২. ফাইল লেখা (Writing to Files)
Node.js এ ফাইল লেখার জন্য fs.writeFile() এবং fs.writeFileSync() পদ্ধতি ব্যবহার করা হয়। writeFile() আসিনক্রোনাস, এবং writeFileSync() সিনক্রোনাস।
a. Asynchronous File Write (আসিনক্রোনাস ফাইল লেখা)
const fs = require('fs');
// ফাইল লেখা (Asynchronous)
const content = 'Hello, this is some text!';
fs.writeFile('output.txt', content, (err) => {
if (err) {
console.log('Error writing to file:', err);
return;
}
console.log('File has been written!');
});এখানে, fs.writeFile() ফাংশনটি আসিনক্রোনাস, যার ফলে এটি দ্রুত ফলাফল প্রদান করে এবং অন্য কোড চলতে থাকে।
b. Synchronous File Write (সিনক্রোনাস ফাইল লেখা)
const fs = require('fs');
// ফাইল লেখা (Synchronous)
const content = 'This is written synchronously!';
try {
fs.writeFileSync('outputSync.txt', content);
console.log('File has been written synchronously!');
} catch (err) {
console.log('Error writing to file:', err);
}এখানে, fs.writeFileSync() ফাংশনটি সিনক্রোনাস, তাই এটি লেখার কাজ সম্পন্ন হওয়া পর্যন্ত পরবর্তী কোড চলতে পারে না।
৩. ফাইল মুছে ফেলা (Deleting Files)
Node.js এ ফাইল মুছে ফেলার জন্য fs.unlink() এবং fs.unlinkSync() পদ্ধতি ব্যবহার করা হয়। unlink() আসিনক্রোনাস, এবং unlinkSync() সিনক্রোনাস।
a. Asynchronous File Deletion (আসিনক্রোনাস ফাইল মুছে ফেলা)
const fs = require('fs');
// ফাইল মুছে ফেলা (Asynchronous)
fs.unlink('output.txt', (err) => {
if (err) {
console.log('Error deleting file:', err);
return;
}
console.log('File has been deleted!');
});b. Synchronous File Deletion (সিনক্রোনাস ফাইল মুছে ফেলা)
const fs = require('fs');
// ফাইল মুছে ফেলা (Synchronous)
try {
fs.unlinkSync('outputSync.txt');
console.log('File has been deleted synchronously!');
} catch (err) {
console.log('Error deleting file:', err);
}৪. ডিরেক্টরি তৈরি (Creating Directories)
Node.js এ ডিরেক্টরি তৈরি করতে fs.mkdir() এবং fs.mkdirSync() পদ্ধতি ব্যবহার করা হয়।
a. Asynchronous Directory Creation (আসিনক্রোনাস ডিরেক্টরি তৈরি)
const fs = require('fs');
// ডিরেক্টরি তৈরি (Asynchronous)
fs.mkdir('newDir', { recursive: true }, (err) => {
if (err) {
console.log('Error creating directory:', err);
return;
}
console.log('Directory has been created!');
});b. Synchronous Directory Creation (সিনক্রোনাস ডিরেক্টরি তৈরি)
const fs = require('fs');
// ডিরেক্টরি তৈরি (Synchronous)
try {
fs.mkdirSync('newDirSync', { recursive: true });
console.log('Directory has been created synchronously!');
} catch (err) {
console.log('Error creating directory:', err);
}এখানে, { recursive: true } অপশনটি ব্যবহার করা হয়েছে যাতে এটি nested ডিরেক্টরি তৈরি করতে পারে।
৫. ডিরেক্টরি পড়া (Reading Directories)
ডিরেক্টরি থেকে ফাইল বা সাব-ডিরেক্টরি পড়তে fs.readdir() এবং fs.readdirSync() পদ্ধতি ব্যবহার করা হয়।
a. Asynchronous Directory Read (আসিনক্রোনাস ডিরেক্টরি পড়া)
const fs = require('fs');
// ডিরেক্টরি পড়া (Asynchronous)
fs.readdir('someDirectory', (err, files) => {
if (err) {
console.log('Error reading directory:', err);
return;
}
console.log('Files in directory:', files);
});b. Synchronous Directory Read (সিনক্রোনাস ডিরেক্টরি পড়া)
const fs = require('fs');
// ডিরেক্টরি পড়া (Synchronous)
try {
const files = fs.readdirSync('someDirectory');
console.log('Files in directory:', files);
} catch (err) {
console.log('Error reading directory:', err);
}সারাংশ
Node.js এর fs মডিউল ফাইল এবং ডিরেক্টরি সম্পর্কিত অপারেশনগুলো খুব সহজে পরিচালনা করতে সক্ষম। আপনি ফাইল পড়া, ফাইল লেখা, ফাইল মুছে ফেলা, ডিরেক্টরি তৈরি এবং পড়া সবকিছুই সিংক্রোনাস ও আসিঙ্ক্রোনাস ফাংশনালিটির মাধ্যমে পরিচালনা করতে পারেন। আসিনক্রোনাস অপারেশনগুলি পারফরম্যান্সের জন্য অধিক কার্যকর, কারণ এগুলি অন্য কাজগুলোর সাথে সমান্তরালে চলতে পারে।
Node.js এ ফাইল সিস্টেমের সাথে কাজ করার জন্য fs (File System) মডিউলটি ব্যবহৃত হয়। ফাইল অপারেশনগুলো সিনক্রোনাস (Synchronous) এবং অ্যাসিনক্রোনাস (Asynchronous) দুটি মোডে করা যেতে পারে। প্রতিটি পদ্ধতির নিজস্ব সুবিধা ও সীমাবদ্ধতা রয়েছে এবং কোনটি ব্যবহার করবেন তা নির্ভর করে আপনার অ্যাপ্লিকেশনের প্রয়োজনে।
১. Synchronous File Operations (সিনক্রোনাস ফাইল অপারেশন)
সিনক্রোনাস ফাইল অপারেশন হল সেই ধরনের অপারেশন যেখানে ফাইলের অপারেশন সম্পন্ন হওয়ার পর পরবর্তী কোড রান হয়। অর্থাৎ, একটি ফাইল অপারেশন শেষ না হওয়া পর্যন্ত অন্য কোন অপারেশন শুরু হয় না।
বৈশিষ্ট্য:
- ব্লকিং অপারেশন: এটি অন্য কোড চালানোর আগে ফাইল অপারেশন সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করে।
- সরল ও সহজ: ছোট বা একক থ্রেডেড অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত, যেখানে একে একে অপারেশন করতে হয়।
উদাহরণ:
const fs = require('fs');
// সিনক্রোনাস ফাইল পড়া
let data = fs.readFileSync('example.txt', 'utf8');
console.log(data); // ফাইলের ডেটা প্রিন্ট করবে
// এই লাইনটি শুধুমাত্র উপরের ফাইল পড়ার অপারেশন শেষে চলবে
console.log('File reading completed!');Output:
Hello, this is a test file!
File reading completed!এখানে, fs.readFileSync() ফাইলটি সম্পূর্ণরূপে পড়ে না যতক্ষণ না পরবর্তী কোড চালানো হয় না। এই কারণে ফাইল পড়ার পরেই পরবর্তী লাইনটি চলে।
২. Asynchronous File Operations (অ্যাসিনক্রোনাস ফাইল অপারেশন)
অ্যাসিনক্রোনাস ফাইল অপারেশন হল সেই ধরনের অপারেশন যেখানে ফাইল অপারেশনটি চালানোর পর Node.js অন্য কাজগুলো চালাতে থাকে এবং যখন ফাইল অপারেশনটি সম্পন্ন হয়, তখন কলব্যাক ফাংশনটি ট্রিগার হয়।
বৈশিষ্ট্য:
- নন-ব্লকিং অপারেশন: এটি অন্য কাজের সাথে একই সময়ে চলতে থাকে। ফাইল অপারেশন শেষ হওয়ার পর কলব্যাক ফাংশন চালানো হয়।
- পারফরম্যান্স এবং স্কেলেবিলিটি: বড় বা অনেক অ্যাসিনক্রোনাস অপারেশন যেখানে একাধিক ফাইল অথবা ডেটা হ্যান্ডেল করতে হয়, সেক্ষেত্রে এটি উপযুক্ত।
উদাহরণ:
const fs = require('fs');
// অ্যাসিনক্রোনাস ফাইল পড়া
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) {
console.log('Error reading file:', err);
} else {
console.log(data); // ফাইলের ডেটা প্রিন্ট করবে
}
});
// এই লাইনটি ফাইল পড়া সম্পন্ন হওয়ার আগে চলে যাবে
console.log('File reading started...');Output:
File reading started...
Hello, this is a test file!এখানে, fs.readFile() ফাইল পড়ার কাজ শুরু করার পর পরবর্তী লাইনটি (যেমন console.log('File reading started...');) চলে যায়। ফাইল পড়া শেষ হলে কলব্যাক ফাংশন চালানো হয় এবং ফাইলের ডেটা প্রিন্ট করা হয়।
পার্থক্য: Synchronous vs Asynchronous
| বৈশিষ্ট্য | Synchronous (সিনক্রোনাস) | Asynchronous (অ্যাসিনক্রোনাস) |
|---|---|---|
| ব্লকিং বা নন-ব্লকিং | ব্লকিং (Blocking) | নন-ব্লকিং (Non-blocking) |
| পারফরম্যান্স | কম পারফরম্যান্স (কম স্কেলেবল) | ভালো পারফরম্যান্স (উচ্চ স্কেলেবল) |
| ব্যবহারযোগ্যতা | ছোট সিস্টেম বা একক থ্রেডেড অ্যাপ্লিকেশনে | বড়, স্কেলেবল বা কনকারেন্ট অ্যাপ্লিকেশনে |
| অপারেশন সম্পন্ন না হলে | পরবর্তী কোড রান হয় না | পরবর্তী কোড রান হয়, কলব্যাক ফাংশন পরে |
| কোডের প্রবাহ | সরল, সহজে বুঝতে পারা যায় | অ্যাসিনক্রোনাস কলব্যাক ব্যবহৃত হয় |
কোনটি ব্যবহার করবেন?
- Synchronous ফাইল অপারেশন ব্যবহার করা উপযুক্ত যখন আপনি ছোট, একক থ্রেডেড অ্যাপ্লিকেশন তৈরি করছেন এবং যেখানে কোডের প্রক্রিয়া সোজা এবং নির্ধারিত।
- Asynchronous ফাইল অপারেশন ব্যবহার করা উচিত যখন আপনার অ্যাপ্লিকেশনকে স্কেলেবেল এবং দ্রুত পারফরম্যান্সের প্রয়োজন রয়েছে, এবং আপনি একাধিক ফাইল বা I/O অপারেশন একসাথে পরিচালনা করতে চান।
সারাংশ
- Synchronous File Operations: কোড চলতে থাকে শুধুমাত্র ফাইল অপারেশন সম্পন্ন হওয়ার পর।
- Asynchronous File Operations: কোড চালানো চলতে থাকে এবং ফাইল অপারেশন শেষ হলে কলব্যাক ফাংশন ট্রিগার হয়।
Node.js এর অ্যাসিনক্রোনাস পদ্ধতি উচ্চ পারফরম্যান্স এবং স্কেলেবিলিটি প্রদান করে, বিশেষ করে যখন একাধিক I/O অপারেশন বা ফাইল সংক্রান্ত কাজ করা হয়।
File Streaming হল একটি প্রক্রিয়া যেখানে ফাইলের ডাটা ছোট অংশে পড়া এবং লেখা হয়, যাতে মেমরি ব্যবহারের পরিমাণ কমে যায় এবং বৃহৎ ফাইল হ্যান্ডলিং সহজ হয়। Node.js এ streams ব্যবহৃত হয় ডাটা প্রবাহের সাথে কাজ করার জন্য, যেমন ফাইল সিস্টেম থেকে ডাটা পড়া, ডাটা প্রসেস করা বা ডাটা কোনো জায়গায় লিখা।
Node.js এ দুই ধরনের স্ট্রিম ব্যবহৃত হয়:
- Readable Streams
- Writable Streams
এই দুই ধরনের স্ট্রিম ফাইল সিস্টেম, নেটওয়ার্ক ইত্যাদির সাথে ডাটা প্রবাহ পরিচালনা করতে সহায়ক।
১. Readable Streams
Readable Streams হল সেই স্ট্রিম যেগুলো থেকে ডাটা পড়া হয়। এগুলি ডাটা স্নাত (streamed) হয়ে পড়তে থাকে এবং এই ডাটা প্রসেসিং করা যায় বা কোনো স্থানে পাঠানো যায়। fs.createReadStream() মেথডের মাধ্যমে ফাইল থেকে ডাটা পড়ার জন্য Readable Streams ব্যবহৃত হয়।
Readable Stream এর ব্যবহার:
ফাইল থেকে ডাটা পড়া:
const fs = require('fs');
// ফাইলের থেকে ডাটা পড়া
const readableStream = fs.createReadStream('example.txt', 'utf8');
// ডাটা যখন স্ট্রিম হয় তখন 'data' ইভেন্ট ট্রিগার হয়
readableStream.on('data', (chunk) => {
console.log('Received chunk:', chunk);
});
// 'end' ইভেন্ট যখন ফাইল পড়া সম্পূর্ণ হয়
readableStream.on('end', () => {
console.log('File reading complete');
});
// 'error' ইভেন্ট যদি কোনো সমস্যা ঘটে
readableStream.on('error', (err) => {
console.log('Error reading file:', err);
});উপরে দেখানো কোডে, ফাইল example.txt থেকে ডাটা পড়ার জন্য একটি Readable Stream ব্যবহার করা হয়েছে। এই স্ট্রিমে data ইভেন্টের মাধ্যমে ডাটা পড়া হয়, এবং যখন পুরো ফাইলটি পড়ে ফেলা হয়, তখন end ইভেন্ট ট্রিগার হয়।
Readable Stream এর মূল বৈশিষ্ট্য:
- ডাটা স্নাত: বড় ফাইলকে ছোট অংশে পড়ার সুবিধা দেয়।
- ব্লকিং নয়: ডাটা পড়তে সময় লাগলেও এটি অ্যাসিনক্রোনাসভাবে কাজ করে, যার ফলে অন্যান্য কাজগুলোর মধ্যে বাধা সৃষ্টি হয় না।
- ব্যাকপ্রেসার: যখন ডাটা দ্রুত প্রবাহিত হয়, তখন ব্যাকপ্রেসার ব্যবহার করে স্ট্রিমের গতিকে নিয়ন্ত্রণ করা যায়।
২. Writable Streams
Writable Streams হল স্ট্রিম যেগুলোর মাধ্যমে ডাটা লেখা হয়। এগুলো ডাটা গ্রহণ করে এবং নির্দিষ্ট জায়গায় (যেমন ফাইল, নেটওয়ার্ক ইত্যাদিতে) লেখে। Node.js এ fs.createWriteStream() ব্যবহার করে Writable Streams তৈরি করা হয়, যা ডাটা লিখতে ব্যবহৃত হয়।
Writable Stream এর ব্যবহার:
ফাইলে ডাটা লেখা:
const fs = require('fs');
// ফাইলে ডাটা লেখা
const writableStream = fs.createWriteStream('output.txt');
// 'write' মেথডের মাধ্যমে ডাটা লেখার জন্য
writableStream.write('Hello, World!\n');
writableStream.write('This is another line.\n');
// 'finish' ইভেন্ট যখন সব ডাটা লেখা হয়ে যায়
writableStream.on('finish', () => {
console.log('All data written to file');
});
// 'error' ইভেন্ট যদি কোনো সমস্যা ঘটে
writableStream.on('error', (err) => {
console.log('Error writing file:', err);
});উপরে দেওয়া কোডে, Writable Stream ব্যবহার করে output.txt ফাইলে ডাটা লেখা হয়েছে। write() মেথডের মাধ্যমে প্রতিটি চাঙ্ক ফাইলে লেখা হয়, এবং finish ইভেন্টের মাধ্যমে নিশ্চিত করা হয় যে, সব ডাটা সফলভাবে লেখা হয়েছে।
Writable Stream এর মূল বৈশিষ্ট্য:
- ডাটা লেখা: এটি ডাটা গ্রহণ করে এবং সেগুলিকে নির্দিষ্ট স্থানে লিখে।
- ব্যাকপ্রেসার: যখন ডাটা দ্রুত লিখা হয়, তখন ব্যাকপ্রেসার ব্যবহার করে স্ট্রিমের গতিকে নিয়ন্ত্রণ করা যায়।
- অ্যাসিনক্রোনাস: Writable Streams অ্যাসিনক্রোনাসভাবে কাজ করে, যাতে এটি ডাটা লেখার সময় অন্যান্য কাজ সম্পন্ন হতে পারে।
৩. Readable এবং Writable Streams একত্রে ব্যবহার
অনেক সময় Readable এবং Writable Streams একত্রে ব্যবহার করা হয়, যেমন একটি ফাইল থেকে ডাটা পড়ে অন্য একটি ফাইলে লেখার জন্য।
উদাহরণ: ফাইল কপি করা
const fs = require('fs');
// Readable Stream - ফাইল থেকে ডাটা পড়া
const readableStream = fs.createReadStream('source.txt');
// Writable Stream - নতুন ফাইলে ডাটা লেখা
const writableStream = fs.createWriteStream('destination.txt');
// Readable স্ট্রিম থেকে ডাটা পড়া এবং Writable স্ট্রিমে লেখা
readableStream.pipe(writableStream);
// 'finish' ইভেন্ট যখন সব ডাটা লেখা হয়ে যায়
writableStream.on('finish', () => {
console.log('File copied successfully!');
});এখানে, pipe() মেথডের মাধ্যমে Readable Stream থেকে ডাটা Writable Stream এ পাস করা হয়। এই পদ্ধতিটি ফাইল কপি করার জন্য ব্যবহৃত হয় এবং এটি খুবই কার্যকরী কারণ এটি ডাটা পাঠানো এবং গ্রহণ করা দ্রুত ও কার্যকরীভাবে করে।
সারাংশ
- Readable Streams ব্যবহার করে ফাইল বা ডাটা সিস্টেম থেকে ডাটা পড়া হয়, এবং Writable Streams ব্যবহার করে ডাটা লিখতে হয়।
- Readable Streams অ্যাসিনক্রোনাসভাবে ডাটা পড়তে পারে, এবং ডাটা স্নাতভাবে প্রবাহিত হয়, যার ফলে বড় ফাইল সহজেই ম্যানেজ করা যায়।
- Writable Streams ডাটা গ্রহণ করে এবং নির্দিষ্ট ফাইলে বা নেটওয়ার্কে লেখে।
- Readable এবং Writable Streams একত্রে ব্যবহার করা হলে ডাটা এক জায়গা থেকে অন্য জায়গায় দ্রুত এবং কার্যকরভাবে ট্রান্সফার করা যায়, যেমন ফাইল কপি করা।
Stream ব্যবহার করে Node.js এ ডাটা স্নাত (stream) ও অ্যাসিনক্রোনাসভাবে পরিচালনা করা সম্ভব, যা দ্রুত পারফরম্যান্স এবং কম মেমরি ব্যবহারের জন্য খুবই উপকারী।
Node.js এ ফাইল সিস্টেম পরিচালনা এবং ডিরেক্টরি সম্পর্কিত কার্যক্রম করতে দুটি প্রধান মডিউল ব্যবহৃত হয়:
- fs (File System) মডিউল – এটি ফাইল সিস্টেমে ফাইল তৈরি, পড়া, লেখা, মুছে ফেলা ইত্যাদি কার্যক্রম পরিচালনা করতে ব্যবহৃত হয়।
- path মডিউল – এটি ফাইল এবং ডিরেক্টরি পাথ সম্পর্কিত কার্যক্রম, যেমন পাথ জয়েন করা, এক্সটেনশন বের করা, পাথ রেজলভ করা ইত্যাদি করতে ব্যবহৃত হয়।
নিচে এই দুটি মডিউল নিয়ে বিস্তারিত আলোচনা করা হলো।
১. fs (File System) মডিউল
fs মডিউল Node.js এ ফাইল সিস্টেমের সাথে ইন্টারঅ্যাক্ট করার জন্য ব্যবহৃত হয়। এর মাধ্যমে আপনি ফাইল পড়তে, লিখতে, ফাইল তৈরি করতে, ডিলিট করতে এবং অন্যান্য ফাইল সিস্টেম সম্পর্কিত কার্যক্রম করতে পারেন।
fs মডিউল ব্যবহার
ফাইল পড়া:
fs.readFile()ব্যবহার করে ফাইলের কনটেন্ট পড়া যায়।const fs = require('fs'); fs.readFile('example.txt', 'utf8', (err, data) => { if (err) { console.log('Error reading file:', err); } else { console.log('File content:', data); } });ফাইল লেখা:
fs.writeFile()ব্যবহার করে ফাইল লিখা যায়।const fs = require('fs'); const content = 'Hello, this is a test file!'; fs.writeFile('example.txt', content, (err) => { if (err) { console.log('Error writing file:', err); } else { console.log('File written successfully'); } });ফাইল তৈরি:
fs.appendFile()ব্যবহার করে নতুন ফাইল তৈরি করা যেতে পারে অথবা বিদ্যমান ফাইলে ডাটা যোগ করা যেতে পারে।const fs = require('fs'); const newContent = 'This is new content.'; fs.appendFile('example.txt', newContent, (err) => { if (err) { console.log('Error appending file:', err); } else { console.log('Content appended successfully'); } });ফাইল মুছে ফেলা:
fs.unlink()ব্যবহার করে ফাইল মুছে ফেলা যায়।const fs = require('fs'); fs.unlink('example.txt', (err) => { if (err) { console.log('Error deleting file:', err); } else { console.log('File deleted successfully'); } });ডিরেক্টরি তৈরি:
fs.mkdir()ব্যবহার করে একটি নতুন ডিরেক্টরি তৈরি করা যায়।const fs = require('fs'); fs.mkdir('newDirectory', { recursive: true }, (err) => { if (err) { console.log('Error creating directory:', err); } else { console.log('Directory created successfully'); } });ডিরেক্টরি মুছে ফেলা:
fs.rmdir()ব্যবহার করে ডিরেক্টরি মুছে ফেলা যায়।const fs = require('fs'); fs.rmdir('newDirectory', (err) => { if (err) { console.log('Error removing directory:', err); } else { console.log('Directory removed successfully'); } });
২. path মডিউল
path মডিউল Node.js এর একটি বিল্ট-ইন মডিউল, যা পাথ সম্পর্কিত বিভিন্ন কাজ যেমন পাথ জয়েন করা, পাথ রেজলভ করা, ফাইল এক্সটেনশন বের করা ইত্যাদি করতে ব্যবহৃত হয়।
path মডিউল ব্যবহার
পাথ জয়েন করা:
path.join()ব্যবহার করে সঠিক ফাইল পাথ তৈরি করা যায় (অপারেটিং সিস্টেম অনুযায়ী সঠিক স্ল্যাশ ব্যবহার করবে)।const path = require('path'); const filePath = path.join('folder', 'subfolder', 'file.txt'); console.log(filePath); // Output: folder/subfolder/file.txt (on UNIX-like OS)অ্যাবসোলিউট পাথ রেজলভ করা:
path.resolve()ব্যবহার করে একটি অ্যাবসোলিউট পাথ পাওয়া যায়।const path = require('path'); const absolutePath = path.resolve('folder', 'file.txt'); console.log(absolutePath); // Output: (absolute path of the file)পাথ থেকে ডিরেক্টরি বের করা:
path.dirname()ব্যবহার করে পাথ থেকে ডিরেক্টরি বের করা যায়।const path = require('path'); const directory = path.dirname('/folder/subfolder/file.txt'); console.log(directory); // Output: /folder/subfolderপাথ থেকে ফাইল নাম বের করা:
path.basename()ব্যবহার করে পাথ থেকে ফাইল নাম বের করা যায়।const path = require('path'); const fileName = path.basename('/folder/subfolder/file.txt'); console.log(fileName); // Output: file.txtফাইল এক্সটেনশন বের করা:
path.extname()ব্যবহার করে একটি ফাইলের এক্সটেনশন বের করা যায়।const path = require('path'); const fileExtension = path.extname('file.txt'); console.log(fileExtension); // Output: .txt
৩. fs এবং path মডিউল একসাথে ব্যবহার
আপনি fs এবং path মডিউল একসাথে ব্যবহার করে ফাইল এবং ডিরেক্টরি সম্পর্কিত কার্যক্রম আরও সহজে করতে পারেন। যেমন, একটি নির্দিষ্ট ডিরেক্টরিতে ফাইল লিখে, তার পাথ নির্ধারণ করা।
উদাহরণ: ফাইল তৈরি এবং তার পাথ দেখা
const fs = require('fs');
const path = require('path');
const dirPath = path.join(__dirname, 'newDirectory');
const filePath = path.join(dirPath, 'newFile.txt');
// ডিরেক্টরি তৈরি করা
fs.mkdir(dirPath, { recursive: true }, (err) => {
if (err) {
console.log('Error creating directory:', err);
} else {
// ফাইল তৈরি করা
fs.writeFile(filePath, 'This is a test file.', (err) => {
if (err) {
console.log('Error writing file:', err);
} else {
console.log('File created at:', filePath);
}
});
}
});এখানে, প্রথমে আমরা path.join() এর মাধ্যমে ডিরেক্টরি এবং ফাইলের পাথ তৈরি করছি, তারপর fs.mkdir() দিয়ে ডিরেক্টরি তৈরি এবং fs.writeFile() দিয়ে ফাইল তৈরি করছি।
সারাংশ
- fs (File System) মডিউল Node.js এ ফাইল সিস্টেমের সাথে কাজ করার জন্য ব্যবহৃত হয়। এর মাধ্যমে ফাইল পড়া, লেখা, তৈরি করা, মুছে ফেলা এবং ডিরেক্টরি পরিচালনা করা যায়।
- path মডিউল ফাইল পাথ সম্পর্কিত কার্যক্রম, যেমন পাথ জয়েন করা, এক্সটেনশন বের করা, ডিরেক্টরি বা ফাইল নাম বের করা ইত্যাদি করতে ব্যবহৃত হয়।
- দুটি মডিউল একত্রে ব্যবহার করে ফাইল এবং ডিরেক্টরি সম্পর্কিত কার্যক্রম আরও সহজভাবে করা যায়।
Read more