Потоки введення-виводу. Читання та запис файлів. FileInputStream та FileOutputStream
У Java потоки введення-виведення (I/O) використовуються для читання та запису даних із зовнішніх джерел, таких як файли, мережеві сокети та інші джерела даних. Java забезпечує широкий набір класів для роботи з потоками введення-виведення, включаючи `FileInputStream` та `FileOutputStream`, які використовуються для роботи з файлами.
1. FileInputStream
FileInputStream` використовується для читання даних із файлів. Він зчитує байти з файлу і підходить для читання текстових або бінарних файлів.
Основні методи:
- int read() — зчитує один байт даних і повертає його, або -1, якщо кінець файлу.
- int read(byte[] b) — зчитує до b.length байтів у масив b.
- void close() — закриває потік і звільняє ресурси.
Приклад читання файлу:
import java.io.FileInputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream(“example.txt”)) {
int content;
while ((content = fis.read()) != -1) {
System.out.print((char) content); // Перетворюємо байти в символи
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. FileOutputStream
FileOutputStream використовується для запису даних у файл. Він записує байти в файл і підходить як для текстових, так і для бінарних файлів.
Основні методи:
- void write(int b) — записує один байт у файл.
- void write(byte[] b) — записує масив байтів у файл.
- void close() — закриває потік і звільняє ресурси.
Приклад запису у файл:
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try (FileOutputStream fos = new FileOutputStream(“output.txt”)) {
String content = “Hello, World!”;
fos.write(content.getBytes()); // Записуємо рядок у вигляді байтів
} catch (IOException e) {
e.printStackTrace();
}
}
}
Особливості:
- Робота з байтами: FileInputStream і FileOutputStream працюють на рівні байтів. Якщо ви хочете працювати з текстовими даними, зручніше використовувати FileReader та FileWriter.
- Обробка винятків: Для роботи з потоками обов’язково слід обробляти винятки, зокрема IOException, яка може виникати під час відкриття, читання або запису файлів.
- Закриття потоків: Завжди потрібно закривати потоки після роботи з ними, щоб уникнути витоку ресурсів. Починаючи з Java 7, можна використовувати конструкцію try-with-resources, яка автоматично закриває потоки.
Альтернативи:
- BufferedInputStream/BufferedOutputStream — для більш ефективної роботи з файлами шляхом буферизації даних.
- FileReader/FileWriter — для роботи з текстовими файлами на рівні символів.
Потоки введення-виводуЧитання та запис файлів. FileInputStream та FileOutputStream