FileOutputStream
می خواهی نوشتن باینری با FileOutputStream را ساده بفهمی؟ این کلاس بایت ها را مستقیماً می نویسد. «بایت (Byte)» کوچک ترین واحد داده است. پس برای متن و فایل های باینری عالی است.
FileOutputStream چیست؟
قبلاً با FileWriter متن می نوشتی. اما اینجا داده به صورت بایت می رود. بنابراین، هم متن می نویسد و هم تصویر و PDF و صدا.
نوشتن متن؛ نمونه پایه
در این مثال، یک متن کوتاه داخل فایل می نویسیم. دقت کن: فایلِ موجود بازنویسی می شود.
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
String text = "Hello World!";
// بستن خودکار با try-with-resources
try (FileOutputStream output = new FileOutputStream("filename.txt")) {
output.write(text.getBytes());
System.out.println("Successfully wrote to file.");
} catch (IOException e) {
System.out.println("Error writing file.");
e.printStackTrace();
}
}
}
کپی فایل باینری؛ مثال واقعی
قدرت اصلی FileOutputStream کار با هر نوع فایل است؛ مثل تصویر.
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 b;
while ((b = input.read()) != -1) {
output.write(b);
}
System.out.println("File copied successfully.");
} catch (IOException e) {
System.out.println("Error handling file.");
}
}
}
افزودن متن به انتهای فایل
اگر نمی خواهی محتوا پاک شود، مد append را فعال کن.
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
String text = "\nAppended text!";
// true یعنی افزودن؛ محتوای قبلی می ماند
try (FileOutputStream output = new FileOutputStream("filename.txt", true)) {
output.write(text.getBytes());
System.out.println("Successfully appended to file.");
} catch (IOException e) {
System.out.println("Error writing file.");
e.printStackTrace();
}
}
}
گام های عملی نوشتن باینری با FileOutputStream
- نوع خروجی را مشخص کن؛ متن یا باینری؟
- FileOutputStream را بساز و مسیر فایل را بده.
- بایت ها را بنویس؛ سپس خروجی را ببند.
نکته: برای خواندن بایت ها از FileInputStream کمک بگیر.
هشدار: اگر بازنویسی نمی خواهی، حتماً سازنده دوم با true بزن.
کدام کلاس را انتخاب کنم؟
متن ساده می نویسی؟ FileWriter کافی است. متن بزرگ و سریع؟ BufferedWriter مناسب تر است. بایت و فایل باینری؟ همین FileOutputStream عالی است. درباره جریان ها هم به جریان های I/O سر بزن.
جمع بندی سریع
- FileOutputStream داده را به صورت بایت می نویسد.
- برای تصویر، PDF و صدا مناسب است.
- حالت پیش فرض، بازنویسی کامل است.
- برای افزودن، از پارامتر true استفاده کن.
- try-with-resources بستن خودکار را تضمین می کند.