Можно ли отправить объект в файл в формате, удобном для чтения? - PullRequest
0 голосов
/ 26 марта 2012

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

Итак, сможет ли кто-нибудь из вас, умных программистов, раскрыть мне секрет того, что я, очевидно, остался вне.

Как отправить объект в файл, который читается как английский?

Я хочу иметь возможность как читать, так и записывать элемент списка дел в файл.Я вижу, что наше приложение выглядит так:

  1. При первом запуске программа спрашивает пользователя, существует ли файл, содержащий элементы списка дел.Если это так, пользователь назовет файл, программа прочитает его и продолжит.
  2. Когда пользователь решит выйти, программа предложит пользователю - спросить, следует ли сохранить элементы списка дел.в файл - если это так, пользователь назовет файл, а программа запишет их так, что сможет снова их прочитать.

Я хочу, чтобы этот файл был удобочитаемым человеком (и редактируемый).Нет двоичных данных.Не считая.Мой вам совет - иметь метод где-то, похожий на:

public ToDoItem getToDoItem(FileInputStream fis) {
   // ...
}

и

public void writeToDoItem(FileOutputStream fos) {
 // ...
}

Ответы [ 5 ]

3 голосов
/ 26 марта 2012

Подумайте о своей модели сериализации.ObjectOutputStream может записывать байты, но есть ли другой способ представить объект и записать его через какой-то другой поток вывода, который пишет текст, читаемый человеком?

2 голосов
/ 26 марта 2012

Это будет зависеть от типа объекта, который у вас есть. Вам придется адаптировать его к конкретному типу данных.

Например, если у вас есть Объект

String title;
List<Integer> ids;

тогда вы можете сохранить его как JSON

{
   title: 'aaaa',
   ids: [ 1,2,3,4,5 ]
}

, что эквивалентно, но гораздо более читабельно, чем двоичный ObjectOutputStream.

Опять же, это не будет работать для всех видов данных.

Существует также сериализация на основе XML-компонентов, которая также работает почти со всеми данными, но я бы не назвал это понятным для человека.

1 голос
/ 26 марта 2012

Подумайте, как бы вы представили объект на бумаге таким образом, чтобы его можно было однозначно реконструировать.Вы, вероятно, перечислили бы имя класса, а затем перечислили бы каждое имя поля и его текущее значение.Если бы поле было примитивным, значение было бы просто примитивным значением.Если бы это был ссылочный тип, вы бы представили объект рекурсивно, используя эту процедуру.Если бы это был массив, вы бы перечислили значение каждого элемента.

Существуют различные стандартные способы форматирования такого представления (XML и JSON, чтобы назвать пару).Ключ в том, чтобы сделать его текстовым представлением, чтобы оно было удобочитаемым.

1 голос
/ 26 марта 2012

Вы можете попробовать JAXB. (Архитектура Java для привязки XML). Он может отправлять объект в стиле JAXB в XML-файл.Но вы должны сначала определить файл XML-схемы.Для более: http://jaxb.java.net/tutorial/

0 голосов
/ 26 марта 2012

Человек, которого вы хотите прочитать, может быть XML или JSON. Мой ответ Как создать дерево объектов из xsd в Java?

может помочь вам подсказать подход, которому вы можете следовать, чтобы достичь того, чего вы хотите.

...