Запись объекта в файл

Я пытаюсь записать HashMap в файл. Код ниже правильно при запуске сразу. Однако, когда я пытаюсь запустить просто запись объекта в файл и просто запустить чтение записанного объекта в файл по отдельности, возникает следующее исключение.

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.HashMap;

public class FileIo {
    String fileName;
    FileOutputStream fos;
    FileInputStream fis;
    ObjectOutputStream oos;
    ObjectInputStream ois;

    public FileIo(String fileName) {
        this.fileName = fileName;
        File file = new File(fileName);
        try {
            if (!file.exists()) {
                file.createNewFile();
                System.out.println("created");
            }
            fos = new FileOutputStream(fileName);
            fis = new FileInputStream(fileName);
            oos = new ObjectOutputStream(fos);
            ois = new ObjectInputStream(fis);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void writeToFile(Object obj) {
        try {
            oos.writeObject(obj);
            oos.flush();
            oos.close();
        } catch (IOException e) {
            e.printStackTrace();

        }

    }

    public Object readFromFile() {
        try {
            return ois.readObject();
        } catch (ClassNotFoundException | IOException e) {
            e.printStackTrace();
        }

        return null;

    }

    @SuppressWarnings("unchecked")
    public static void main(String args[]) {
        HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
        FileIo fi = new FileIo("tex.txt");
        //Only write to the file
        ArrayList<String> a = new ArrayList<>();
        a.add("test");
        map.put("testput", a);
        fi.writeToFile(map);
        //Only write to the file
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //Only read from the file
        map = null;
        map = (HashMap<String, ArrayList<String>>) fi.readFromFile();
        System.out.println(map.toString());
    }
}

// Исключение

    java.io.EOFException
    at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2608)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1319)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
    at FileIo.readFromFile(FileIo.java:49)
    at FileIo.main(FileIo.java:73)

Единственное, что происходит по-другому - это вместо того, чтобы прямо писать и мгновенно читать. Сначала я пишу, что объектная программа завершает работу, а затем запускаю программу, чтобы прочитать объект.

1 ответ

Решение

Вам нужно создать FileInputStream после того, как данные были записаны в файл.

Вы не можете создать его раньше и предположить, что он покажет записанные данные.

Другие вопросы по тегам