Серіалізація об’єктів. Клас File. Робота з файлами та каталогами
Серіалізація об’єктів в Java
Серіалізація — це процес перетворення об’єкта в потік байтів, щоб його можна було зберегти у файл, передати по мережі або іншим чином використовувати в збереженому вигляді. Відповідно, **десеріалізація** — це процес відновлення об’єкта з потоку байтів.
У Java для серіалізації використовується інтерфейс `Serializable`, який необхідно реалізувати класу, об’єкти якого ви хочете серіалізувати. Під час серіалізації автоматично зберігається стан всіх полів об’єкта, крім тих, що позначені ключовим словом `transient`.
Основні класи для серіалізації:
- ObjectOutputStream — використовується для запису об’єктів у потік (серіалізація).
- ObjectInputStream — використовується для читання об’єктів з потоку (десеріалізація).
Приклад серіалізації:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Person implements Serializable {
private static final long serialVersionUID = 1L; // Рекомендується для збереження сумісності версій класу
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person(“John”, 30);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(“person.ser”))) {
oos.writeObject(person); // Серіалізуємо об’єкт
} catch (IOException e) {
e.printStackTrace();
}
}
}
Приклад десеріалізації:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class Main {
public static void main(String[] args) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(“person.ser”))) {
Person person = (Person) ois.readObject(); // Десеріалізуємо об’єкт
System.out.println(“Ім’я: ” + person.name + “, Вік: ” + person.age);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Клас File
Клас File у Java використовується для роботи з файлами та каталогами. Він дозволяє створювати, видаляти, перейменовувати файли та каталоги, перевіряти їх існування, отримувати інформацію про них тощо. Клас не використовується безпосередньо для читання або запису в файл — для цього служать інші класи, такі як FileReader, FileWriter та їх буферизовані варіанти.
Основні методи класу `File`:
- exists() — перевіряє, чи існує файл або каталог.
- createNewFile() — створює новий файл, якщо його ще не існує.
- delete() — видаляє файл або порожній каталог.
- isFile() — перевіряє, чи є об’єкт файлом.
- isDirectory() — перевіряє, чи є об’єкт каталогом.
- mkdir() — створює новий каталог.
- list() — повертає список файлів і каталогів у каталозі.
- length() — повертає розмір файлу в байтах.
- renameTo(File dest)** — перейменовує файл або каталог.
Приклад роботи з файлом
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
File file = new File(“example.txt”);
try {
if (file.createNewFile()) {
System.out.println(“Файл створено: ” + file.getName());
} else {
System.out.println(“Файл вже існує.”);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Робота з каталогами
Клас File також дозволяє працювати з каталогами. Можна створювати нові каталоги, отримувати список файлів у каталозі або видаляти їх.
Створення каталогу:
import java.io.File;
public class Main {
public static void main(String[] args) {
File dir = new File(“myDirectory”);
if (dir.mkdir()) {
System.out.println(“Каталог створено: ” + dir.getName());
} else {
System.out.println(“Каталог не вдалося створити.”);
}
}
}
Отримання списку файлів у каталозі:
import java.io.File;
public class Main {
public static void main(String[] args) {
File dir = new File(“myDirectory”);
if (dir.exists() && dir.isDirectory()) {
String[] files = dir.list(); // Отримуємо список файлів і каталогів
if (files != null) {
for (String file : files) {
System.out.println(file);
}
}
}
}
}
Видалення файлу або каталогу:
import java.io.File;
public class Main {
public static void main(String[] args) {
File file = new File(“example.txt”);
if (file.delete()) {
System.out.println(“Файл видалено: ” + file.getName());
} else {
System.out.println(“Не вдалося видалити файл.”);
}
}
}
Основні моменти роботи з файлами та каталогами:
- Клас File не використовується для читання або запису в файли — він використовується для управління файлами (створення, видалення, перевірка існування).
- Для роботи з текстовими або бінарними даними у файлі використовуються класи FileReader, FileWriter, FileInputStream, FileOutputStream або їх буферизовані варіанти.
- Серіалізація дозволяє зберігати та відновлювати стан об’єктів у зручному форматі.
Серіалізація об’єктівКлас File. Робота з файлами та каталогами