Класи 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();
}
}
}
Важливі моменти:
- DataOutputStream і DataInputStream працюють із бінарними даними, що робить їх зручними для запису примітивних типів даних у файл, а не тексту.
- FileWriter/FileReader та BufferedWriter/BufferedReader використовуються для роботи з текстовими файлами.
- Буферизовані класи (наприклад, BufferedReader і BufferedWriter) підвищують ефективність роботи з файлами завдяки використанню внутрішніх буферів.
Класи DataOutputStream та DataInputStreamЧитання та запис текстових файлів