Java I/O (Input/Output) অপারেশনগুলি ফাইল এবং স্ট্রিমের মাধ্যমে ডেটা পরিচালনার জন্য ব্যবহৃত হয়। যেহেতু ফাইলের সাথে কাজ করার সময় বিভিন্ন রকমের সমস্যার সম্মুখীন হওয়া সম্ভব, তাই Java I/O সম্পর্কিত অনেকগুলি Exception রয়েছে যা ফাইল অপারেশনের সময় ঘটতে পারে।
এই exceptions গুলি সাধারণত IOException এর অন্তর্গত এবং বিভিন্ন বিশেষ ক্লাস দ্বারা সেগুলি পরিচালিত হয়। কিছু গুরুত্বপূর্ণ File I/O exceptions এবং তাদের ব্যবহারের উদাহরণ এখানে দেওয়া হয়েছে।
File I/O Exception Handling
1. FileNotFoundException
এই exceptionটি ঘটে যখন আপনি যেই ফাইলটি খুলতে চাচ্ছেন তা সিস্টেমে পাওয়া যায় না। এটি IOException এর একটি সাবক্লাস এবং সাধারণত FileInputStream, FileReader, FileOutputStream, এবং FileWriter ক্লাসে ঘটে।
2. IOException
এটি I/O অপারেশন এর জন্য একটি সাধারণ ব্যতিক্রম যা যখন কোনো সাধারণ I/O সমস্যা ঘটে তখন ফেলে। এটি প্রায় সব ধরনের I/O কার্যক্রমে ঘটতে পারে, যেমন ফাইল পড়া, লেখা, বা স্ট্রিম বন্ধ করা।
3. EOFException
এই exceptionটি ঘটে যখন স্ট্রিমের শেষে পৌঁছে যাওয়া হয় কিন্তু এখনও ডেটা পড়ার চেষ্টা করা হয়।
4. FileAlreadyExistsException
এই exceptionটি ঘটে যখন আপনি একটি ফাইল তৈরি করার চেষ্টা করেন, কিন্তু সেই ফাইলটি ইতিমধ্যেই বিদ্যমান থাকে।
File I/O Exceptions এর উদাহরণ
1. FileNotFoundException Handling Example
import java.io.*;
public class FileNotFoundExceptionExample {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("nonexistentfile.txt");
fis.read();
} catch (FileNotFoundException e) {
System.out.println("Error: The file was not found.");
} catch (IOException e) {
System.out.println("Error: An I/O error occurred.");
}
}
}
ব্যাখ্যা:
FileNotFoundExceptionঘটবে যদি "nonexistentfile.txt" ফাইলটি সিস্টেমে না থাকে।
আউটপুট:
Error: The file was not found.
2. IOException Handling Example
import java.io.*;
public class IOExceptionExample {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("input.txt");
int data = fis.read();
if (data == -1) {
throw new IOException("End of file reached unexpectedly.");
}
fis.close();
} catch (IOException e) {
System.out.println("IOException: " + e.getMessage());
}
}
}
ব্যাখ্যা:
- এখানে একটি সাধারণ
IOExceptionহ্যান্ডলিং উদাহরণ রয়েছে। যখন EOF পৌঁছে যায়, তখন একটিIOExceptionফেলা হয়।
আউটপুট:
IOException: End of file reached unexpectedly.
3. EOFException Handling Example
import java.io.*;
public class EOFExceptionExample {
public static void main(String[] args) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("data.dat"))) {
while (true) {
Object obj = ois.readObject(); // Attempting to read beyond the end of file
}
} catch (EOFException e) {
System.out.println("End of File reached.");
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- EOFException তখন ঘটে যখন একটি অবজেক্ট স্ট্রিমের মাধ্যমে আপনি ফাইলের শেষের পর আরও ডেটা পড়ার চেষ্টা করেন।
আউটপুট:
End of File reached.
4. FileAlreadyExistsException Handling Example
import java.io.*;
import java.nio.file.*;
public class FileAlreadyExistsExceptionExample {
public static void main(String[] args) {
try {
Path path = Paths.get("existingfile.txt");
Files.createFile(path); // This will throw an exception if file exists
} catch (FileAlreadyExistsException e) {
System.out.println("Error: The file already exists.");
} catch (IOException e) {
System.out.println("IOException: " + e.getMessage());
}
}
}
ব্যাখ্যা:
- FileAlreadyExistsException তখন ঘটে যখন আপনি একটি নতুন ফাইল তৈরি করার চেষ্টা করেন কিন্তু সেই ফাইলটি ইতিমধ্যেই বিদ্যমান থাকে।
আউটপুট:
Error: The file already exists.
Stream Chaining এবং Tuples
Java Stream API এবং Java Tuples একত্রে ব্যবহার করে, আপনি ফাইলের উপর বিভিন্ন স্ট্রিম অপারেশন চালাতে পারেন এবং এর সাথে অতিরিক্ত প্রপার্টি যেমন ফাইলের নাম, আকার, ডেটা ইত্যাদি সংরক্ষণ করতে পারেন।
Tuples এবং Stream Chaining উদাহরণ
import java.io.*;
import java.util.*;
import org.apache.commons.lang3.tuple.Pair;
public class FileStreamChainingWithTuples {
public static void main(String[] args) {
List<File> files = Arrays.asList(new File("file1.txt"), new File("file2.txt"));
// Stream Chaining এবং Tuples ব্যবহার করে ফাইল প্রক্রিয়া করা
files.stream()
.filter(file -> file.exists()) // শুধুমাত্র বিদ্যমান ফাইলগুলি ফিল্টার করা
.map(file -> Pair.of(file.getName(), file.length())) // Tuple তৈরি: ফাইলের নাম এবং আকার
.forEach(fileInfo -> System.out.println("File: " + fileInfo.getLeft() + ", Size: " + fileInfo.getRight() + " bytes"));
}
}
ব্যাখ্যা:
Pairব্যবহার করে প্রতিটি ফাইলের নাম এবং আকার সংরক্ষণ করা হচ্ছে।- Stream অপারেশনগুলি একত্রিত করে ফাইল প্রক্রিয়া করা হচ্ছে এবং আউটপুটে
Pairএর মাধ্যমে ফলাফল প্রদর্শন করা হচ্ছে।
আউটপুট:
File: file1.txt, Size: 1024 bytes
File: file2.txt, Size: 2048 bytes
Java I/O সিস্টেমে ফাইল পরিচালনার সময় Exceptions সাধারণত ঘটতে পারে। IOException, FileNotFoundException, EOFException, এবং FileAlreadyExistsException এর মতো Exception গুলি সাধারণ এবং বিভিন্ন ধরনের ফাইল এবং স্ট্রিম অপারেশন সময় ঘটতে পারে।
- Java Tuples এবং Stream Chaining ব্যবহার করে, আপনি ফাইলের বিভিন্ন প্রোপার্টি যেমন নাম এবং আকার একত্রে সংরক্ষণ করতে পারেন এবং ডেটা প্রক্রিয়াকরণ আরো কার্যকরী করতে পারেন।
- Exception Handling গুরুত্বপূর্ণ, কারণ এটি ফাইল অপারেশনের সময় সম্ভাব্য ত্রুটি ম্যানেজ করতে সহায়ক হয়, যা অ্যাপ্লিকেশনকে ক্র্যাশ হওয়া থেকে রক্ষা করে।
Read more