Почему 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
,