私はファイルのシリアル化と逆シリアル化を扱っています。さらに、私はで使用FileOutputStream
することについてスタックしていObjectOutputStream
ます。問題は、サーバー/クライアントチャットアプリケーションがあり、クライアントが接続されている場合は常に、接続されているクライアントが以前に登録されているかどうかをサーバーが確認する必要があることです。したがって、クライアントがサーバーに接続されると、サーバーは次のような出力ストリームを作成します。
FileOutputStream fos = new FileOutputStream("src\\example\\mainList.txt");
このリストにこのオブジェクトが含まれているかどうかを確認するためのリンクリストを取得します。ただし、FileOutputStream
内容のない新しいファイルを常に作成します。ファイルを追加するための2番目のパラメーターとして「true」値を渡すかどうかはわかりますが、この.txtファイルにはリンクリストであるオブジェクトが1つだけ含まれている必要があります。したがって、すべてのプロセスでリストを追加したくありません。どうすれば問題に対処できますか?ただ欲しいだけ
- 内容のない特定のファイルがあり、オブジェクトを読み取らない場合は、リストを初めて追加するだけです。
- 内容を含む指定されたファイルがある場合(つまり、リンクリストオブジェクトが1つしかない場合)、それを読み取り、新しいクライアントをリストに追加して、リンクリストオブジェクトをファイルに書き戻します。
私は私の問題についてあなたに明確になっていたことを願っています、そして私はすべての答えに感謝します。とにかくありがとう
編集:これは私が言おうとしていることの簡単な例です。
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
2番目のパラメーターに使用すると、リンクリストが追加されます。