Класи DataOutputStream та DataInputStream. Читання та запис текстових файлів

Прокрутити вниз

Класи DataOutputStream та DataInputStream

У Java класи DataOutputStream та DataInputStream дозволяють записувати та зчитувати примітивні типи даних (такі як int, double, float, boolean тощо) у/з байтових потоків. Це дозволяє зберігати дані в бінарному форматі, який можна пізніше легко відновити.

1. DataOutputStream

Клас DataOutputStream використовується для запису примітивних типів даних у вихідний потік у зручному форматі. Він обгортає інший вихідний потік, наприклад, `FileOutputStream`.

Основні методи:
  • writeInt(int v) — записує 4 байти для значення int.
  • writeDouble(double v) — записує 8 байтів для значення double.
  • writeBoolean(boolean v) — записує 1 байт для значення boolean.
  • writeUTF(String str) — записує рядок у форматі UTF-8.

Приклад запису даних:

import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Main {
public static void main(String[] args) {
try (DataOutputStream dos = new DataOutputStream(new FileOutputStream(“data.bin”))) {
dos.writeInt(123); // Записуємо число 123
dos.writeDouble(3.14); // Записуємо число 3.14
dos.writeBoolean(true); // Записуємо логічне значення true
dos.writeUTF(“Hello, World!”); // Записуємо рядок
} catch (IOException e) {
e.printStackTrace();
}
}
}

2. DataInputStream

Клас DataInputStream використовується для зчитування примітивних типів даних із вхідного потоку. Він обгортає інший вхідний потік, наприклад, FileInputStream.

Основні методи:
  • int readInt() — зчитує 4 байти та повертає значення int.
  • double readDouble() — зчитує 8 байтів та повертає значення double.
  • boolean readBoolean() — зчитує 1 байт та повертає значення boolean.
  • String readUTF() — зчитує рядок у форматі UTF-8.

Приклад зчитування даних:

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class Main {
public static void main(String[] args) {
try (DataInputStream dis = new DataInputStream(new FileInputStream(“data.bin”))) {
int number = dis.readInt(); // Читаємо число
double pi = dis.readDouble(); // Читаємо число типу double
boolean flag = dis.readBoolean(); // Читаємо логічне значення
String text = dis.readUTF(); // Читаємо рядок
System.out.printf(“Число: %d, Дійсне число: %.2f, Логічне значення: %b, Текст: %s%n”, number, pi, flag, text);
} catch (IOException e) {
e.printStackTrace();
}
}
}

Читання та запис текстових файлів

Для роботи з текстовими файлами в Java використовуються класи FileReader/FileWriter для читання та запису символів або BufferedReader/BufferedWriter для буферизованої роботи з текстовими файлами, що підвищує ефективність роботи.

1. Запис текстового файлу

Для запису текстових даних у файл найчастіше використовують клас FileWriter. Для підвищення продуктивності часто використовують `BufferedWriter`.

Приклад використання FileWriter та BufferedWriter:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Main {
public static void main(String[] args) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(“example.txt”))) {
writer.write(“Hello, World!”);
writer.newLine(); // Переходимо на новий рядок
writer.write(“Java I/O”);
} catch (IOException e) {
e.printStackTrace();
}
}
}

2. Читання текстового файлу

Для читання текстових даних із файлу використовують клас FileReader. Щоб працювати з рядками, зручно використовувати BufferedReader, який дозволяє зчитувати файл рядок за рядком.

Приклад використання FileReader та BufferedReader:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Main {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader(“example.txt”))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

Важливі моменти:

  1. DataOutputStream і DataInputStream працюють із бінарними даними, що робить їх зручними для запису примітивних типів даних у файл, а не тексту.
  2. FileWriter/FileReader та BufferedWriter/BufferedReader використовуються для роботи з текстовими файлами.
  3. Буферизовані класи (наприклад, BufferedReader і BufferedWriter) підвищують ефективність роботи з файлами завдяки використанню внутрішніх буферів.

Класи DataOutputStream та DataInputStreamЧитання та запис текстових файлів