Потоки введення-виводу. Читання та запис файлів. 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