Запись ArrayList нестроковых объектов в файл - PullRequest
0 голосов
/ 07 декабря 2011

РЕДАКТИРОВАТЬ: я решил проблему, я забыл закрыть ObjectOutputStream. «DOH! Я оставлю вопрос на тот случай, если кто-то захочет предложить более элегантный вариант, который был бы очень признателен.

В настоящее время я пытаюсь записать в файл класс, называемый телефонной книгой, который содержит ArrayList объектов с именем PhonebookEntry. Вот класс телефонной книги:

import java.util.ArrayList;
import java.io.*;

public class Phonebook implements Serializable
    private static final long serialVersionUID = 1;

    ArrayList<PhonebookEntry> phonebookEntries = new ArrayList<PhonebookEntry>();

    public void addEntry(String name, String number) {
        PhonebookEntry newEntry = new PhonebookEntry(name, number);
        phonebookEntries.add(newEntry);
    }

}

Я попытался использовать простой ObjectInput / OutputStream, и я могу получить его для сохранения таким способом, но не для загрузки (обычно с EOFExcpetion). Есть ли элегантный способ сохранить объект, подобный этому, или есть способ сохранить ArrayList объектов в файл?

Ответы [ 3 ]

0 голосов
/ 07 декабря 2011

Следующие работы.Я предполагаю, что вам не хватает flush () или close ().

public static void main(final String[] args) throws IOException, ClassNotFoundException {
    final ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("test.out"));
    final Phonebook phonebook = new Phonebook();
    out.writeObject(phonebook);
    out.flush();
    out.close();

    final ObjectInputStream in = new ObjectInputStream(new FileInputStream("test.out"));
    final Object o = in.readObject();
    System.out.println(o);
}
0 голосов
/ 07 декабря 2011

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

0 голосов
/ 07 декабря 2011

Пара различных проблем, написанный код, который, как я предполагаю, является примером кода (поэтому я не собираюсь его исправлять) никогда не заменит ничего, так как вы продолжаете выпускать объект.Таким образом, в конечном итоге вы получите null, null для каждого дополнения.

Чтобы ответить на ваш вопрос, не знаете, насколько он старше, но более короткая версия:

for (PhonebookEntry pbe : phonebookEntries) {
    System.out.println("Name: " + pbe.getName());
    ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...