Почему ObjectOutputStream записывает символы в файл вместо моего ввода?

Я пытаюсь написать свой ArrayListпо имени Clients, в файл. Это работает, но, к сожалению, он просто записывает символы в файл, а не мой фактический ввод.

Ниже мой код:

    public void SaveToFile() {

    try 
    {
        FileOutputStream fos = new FileOutputStream("CustomerLists.txt");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(Clients);
        oos.close();
    } catch (Exception ex) {
        ex.printStackTrace();
   }

Как мне заставить это работать?

2 ответа

Решение

Что вы сделали, это сериализовать объект Java в файл с ObjectOutputStream, Это означает, что Java преобразует ваш объект Clients в конкретное представление, которое охватывает все состояние вашего объекта, например, переменные-члены. Это представление не предназначено для восприятия человеком, это двоичный формат, который более эффективен и подходит для классов и среды Java, чем текстовый формат. Смотрите здесь для получения дополнительной информации.

Вместо этого вы можете использовать FileWriter, BufferedWriter или же PrintWriter, которые имеют несколько write[...](...) методы для записи текста в файл. В этом случае вы должны записать каждую переменную как String и т. д., а не весь класс. Здесь вы можете найти пример по этому поводу.

Еще один вариант сделать так же, как ObjectOutputStream для целого объекта, но в полностью настраиваемой форме и удобочитаемой форме следует использовать Java-архитектуру для привязки XML (JAXB), но это требует некоторого чтения. Существуют также другие библиотеки сериализации объектов для JSON и других форматов.

Почему, когда я запускаю эту Java-программу, она создает текстовый файл, но выводит символы вместо моего ввода?

Потому что это не текстовый файл. Это сериализованные данные, написанные в соответствии с протоколом сериализации Java, потому что вы используете ObjectOutputStream.writeObject(),

Это также означает, что CustomerLists.txt не подходит имя для этого файла.

Если вы хотите текст, используйте PrintWriter или же BufferedWriter,

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