Comment lire et écrire un objet Java dans un fichier

Comment lire et écrire un objet Java dans un fichier

L'objet JavaSerialization est une API fournie par la pile de la bibliothèque Java pour sérialiser les objets Java. La sérialisation est un processus pour convertir des objets en un flux d'octets inscriptibles. Une fois convertis en flux d'octets, ces objets peuvent être écrits dans un fichier. Le processus inverse est appelé désérialisation.

Un objet Java est sérialisable si sa classe ou l'une de ses superclasses implémente soit l'interfacejava.io.Serializable, soit sa sous-interface,java.io.Externalizable.

1. Objet Java

Person.java

package com.example;

import java.io.Serializable;

public class Person implements Serializable {

    private static final long serialVersionUID = 1L;
    private String name;
    private int age;
    private String gender;

    Person() {
    };

    Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Name:" + name + "\nAge: " + age + "\nGender: " + gender;
    }
}

2. Écriture et lecture d'objets en Java

Les objets peuvent être convertis en flux d'octets en utilisantjava.io.ObjectOutputStream. Afin de permettre l'écriture d'objets dans un fichier en utilisantObjectOutputStream, il est obligatoire que la classe concernée implémente l'interfaceSerializable comme indiqué dans la définition de classe ci-dessous.

La lecture d'objets en Java est similaire à l'écriture d'objets en utilisantObjectOutputStreamObjectInputStream. L'exemple ci-dessous montre le cycle complet d'écriture d'objets et de lecture d'objets en Java.

Lors de la lecture d'objets, leObjectInputStream essaie directement de mapper tous les attributs dans la classe dans laquelle nous essayons de convertir l'objet lu. S'il ne parvient pas à mapper exactement l'objet respectif, il lève une exceptionClassNotFound.

Comprenons maintenant le processus d'écriture et de lecture à l'aide d'un exemple. Nous utilisons la classePerson illustrée ci-dessus en tant qu'objet.

WriterReader.java

package com.example;

package com.example;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class WriterReader {

    public static void main(String[] args) {

        Person p1 = new Person("John", 30, "Male");
        Person p2 = new Person("Rachel", 25, "Female");

        try {
            FileOutputStream f = new FileOutputStream(new File("myObjects.txt"));
            ObjectOutputStream o = new ObjectOutputStream(f);

            // Write objects to file
            o.writeObject(p1);
            o.writeObject(p2);

            o.close();
            f.close();

            FileInputStream fi = new FileInputStream(new File("myObjects.txt"));
            ObjectInputStream oi = new ObjectInputStream(fi);

            // Read objects
            Person pr1 = (Person) oi.readObject();
            Person pr2 = (Person) oi.readObject();

            System.out.println(pr1.toString());
            System.out.println(pr2.toString());

            oi.close();
            fi.close();

        } catch (FileNotFoundException e) {
            System.out.println("File not found");
        } catch (IOException e) {
            System.out.println("Error initializing stream");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

Lors de l'exécution du code ci-dessus, nous obtenons ci-dessous la sortie:

Name:John
Age: 30
Gender: Male
Name:Rachel
Age: 25
Gender: Female