Я имею дело с сериализацией и десериализацией в файлах. Более того, я не согласен с использованием FileOutputStream
с ObjectOutputStream
. Проблема в том, что у меня есть приложение чата сервер/клиент, и всякий раз, когда клиент подключается, сервер должен проверять, зарегистрирован ли ранее подключенный клиент. Итак, когда клиент подключается к серверу, сервер создает выходной поток, например
FileOutputStream fos = new FileOutputStream("src\\example\\mainList.txt");
чтобы получить связанный список, чтобы проверить, содержит ли этот список этот объект или нет. Но FileOutputStream
всегда создает новый файл без содержимого. Я знаю, передаю ли я «истинное» значение в качестве второго параметра для добавления файла, но этот файл .txt должен содержать только один объект, который является связанным списком. Поэтому я не хочу добавлять список в каждый процесс. Как я могу справиться с проблемой? я просто хочу
- Если есть указанный файл без содержимого, не читайте объект, просто добавьте список только в первый раз
- Если есть указанный файл с содержимым (имеется в виду, что есть только один объект связанного списка), то прочитайте его, добавьте нового клиента в список и запишите объект связанного списка обратно в файл.
Я надеюсь, что я ясно объяснил вам мою проблему, и я буду признателен за каждый ответ. Так что все равно спасибо
РЕДАКТИРОВАТЬ: вот простой пример того, что я пытаюсь сказать.
public class PersonTest2 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
LinkedList<Person> list = new LinkedList<Person>();
Person per = new Person("John","Thompson",22);
Person per2 = new Person("Suzie","Cash",23);
Person per3 = new Person("Peter","Jackson",24);
Person per4 = new Person("Michael","Coch",25);
list.add(per);
list.add(per2);
list.add(per3);
list.add(per4);
FileOutputStream fos = new FileOutputStream("person.txt");
BufferedReader br = new BufferedReader(new FileReader("person.txt"));
if (br.readLine() == null ) {
System.out.println("No errors, and file is empty");
}
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(list);
fos.close();
FileInputStream fis = new FileInputStream("person.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
LinkedList<Person> list2;
list2 = (LinkedList) ois.readObject();
for (Iterator<Person> itr = list2.iterator(); itr.hasNext();) {
Person rper = itr.next();
System.out.println(rper.name + " " + rper.last_name + " " + rper.age);
}
}
}
Каждый раз, когда я запускаю этот код, FileOutputStream открывает новый файл. Однако, если я использую true
для второго параметра, он добавит связанные списки.
.readObject
за один раз будет работать правильно, чтобы получить список? - person quartaela   schedule 24.03.2013