Чтение / запись объектов в файл, возвращающий ноль - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь читать и записывать объекты в файл.Чтение вывода в новый объект работает, но каждое значение равно нулю.

Вот код:

public void read() throws Exception
    {
        try
        {
            FileInputStream fIn = new FileInputStream(file);
            ObjectInputStream in = new ObjectInputStream(fIn);

            Object obj = in.readObject();

            System.out.println(obj);
public void save() throws Exception
    {
        FileOutputStream fOut = new FileOutputStream(file.toString());
        ObjectOutputStream out = new ObjectOutputStream(fOut);

        out.writeObject(this);
        out.flush();
        out.close();
    }

Вот файл вывода: (изображение вывода)

Я хотел бы получить значения, которые я ранее записал в файл в новом созданном объекте, однако все, что я получаю, является нулевым для всех значений.

Редактировать: так как людипросят весь класс, и я понятия не имею, какой код может быть причиной чего, вот весь класс UserFile: https://pastebin.com/Gr1tcGsg

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Я обнаружил, что проблема в том, что в моем конструкторе я неправильно применял извлеченную информацию из файла.Спасибо всем за помощь.

0 голосов
/ 08 апреля 2019

Я запустил этот код, и он работает, что означает, что вы, скорее всего, прочитали перед тем, как писать, или вы получили исключение, например InvalidClassException: no valid constructor, которое имеет смысл в вашем случае.

Код, который я запустил:

public class SavedObject implements Serializable
{
    public static void main(String[] args) throws IOException, ClassNotFoundException
    {
        new SavedObject();
    }

    private final int random;

    private SavedObject() throws IOException, ClassNotFoundException
    {
        random = ThreadLocalRandom.current().nextInt();
        File file = new File("Object.txt");
        save(file);
        read(file);
    }

    private void save(File file) throws IOException
    {
        FileOutputStream fileOutput = new FileOutputStream(file);
        ObjectOutputStream objectOutput = new ObjectOutputStream(fileOutput);

        objectOutput.writeObject(this);
        objectOutput.close();
        fileOutput.close();

        System.out.println(this);
    }

    private void read(File file) throws IOException, ClassNotFoundException
    {
        FileInputStream fileInput = new FileInputStream(file);
        ObjectInputStream objectInput = new ObjectInputStream(fileInput);

        Object obj = objectInput.readObject();

        System.out.println(obj);

        objectInput.close();
        fileInput.close();
    }

    public String toString()
    {
        return "SavedObject(Random: " + random + ")";
    }
}

Какие отпечатки:

SavedObject(Random: -2145716528)
SavedObject(Random: -2145716528)

Также несколько советов для вас:

  • Не пытайтесь поймать, если вы throws
  • Иметь более удобочитаемые имена переменных
  • Отправить больше кода в следующем вопросе
  • ObjectOutputStream не рекомендуется, если вы можете, вы должны записать значения, как они
  • Не используйте throws «Исключение», вместо этого используйте throws »
  • Поместите файл вместо file.toString ()
...