FileInputStream
می خواهی «ورود داده با FileInputStream» را ساده بفهمی؟ این کلاس بایت ها را مستقیم می خواند. «بایت (Byte)» کوچک ترین واحد داده است. پس برای متن و فایل های باینری مناسب است.
FileInputStream چیست؟
قبلاً با «Scanner» متن را راحت می خواندی. اما گاهی کنترل کامل بایت ها لازم است. مثل خواندن تصویر یا PDF. این جاست که FileInputStream کمک می کند.
خواندن فایل متنی؛ نمونه پایه
اینجا فایل متنی را بایت به بایت می خوانیم و به حرف تبدیل می کنیم.
import java.io.FileInputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
// try-with-resources: بستن خودکار ورودی
try (FileInputStream input = new FileInputStream("filename.txt")) {
int i;
// تا انتهای فایل بخوان؛ -1 یعنی تمام
while ((i = input.read()) != -1) {
System.out.print((char) i);
}
} catch (IOException e) {
System.out.println("Error reading file.");
}
}
}
کپی فایل باینری؛ مثال واقعی
قدرت اصلی این کلاس کار با هر نوع فایل است؛ حتی تصویر.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyFile {
public static void main(String[] args) {
// کپی image.jpg به copy.jpg
try (FileInputStream input = new FileInputStream("image.jpg");
FileOutputStream output = new FileOutputStream("copy.jpg")) {
int i;
while ((i = input.read()) != -1) {
output.write(i);
}
System.out.println("File copied successfully.");
} catch (IOException e) {
System.out.println("Error handling file.");
}
}
}
چه موقع از کدام کلاس استفاده کنیم؟
متن ساده می خواهی؟ از Scanner استفاده کن. متن بزرگ و سریع؟ BufferedReader بهتر است. کنترل بایت ها یا فایل باینری؟ همین FileInputStream مناسب است.
گام های عملی
- نوع داده را مشخص کن؛ متن یا باینری؟
- اگر باینری است، FileInputStream را انتخاب کن.
- برای نوشتن خروجی، از FileOutputStream کمک بگیر.
نکته: برای بستن خودکار منبع از try-with-resources استفاده کن.
هشدار: متن را با جریان بایتی اشتباه نخوان. نویسه کُدگذاری مهم است.
جمع بندی سریع
- FileInputStream بایت ها را مستقیم می خواند.
- برای تصاویر و PDF عالی است.
- برای متن ساده، Scanner کافی است.
- همیشه منبع را امن ببند.