私はtxtファイルから生徒の地図を読み込み、その後に新しい生徒を地図に追加しようとしています(これは以前よりも大きくなりました)。プログラムを閉じてファイルからデータを読み込んだ後、新しい生徒は保存されませんでした。ファイルにオブジェクトを書くのが難しい
私が代わりに(多くのメモリを使用します)アレイにデータを保存するので、あなたが
/*import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;*/
HashMap<String, Student> studentObj = new HashMap<>(SIZE);
try{
ObjectInputStream in = new ObjectInputStream(new FileInputStream(DEFAULT_FILE_NAME));
studentObj = (HashMap<String, Student>) in.readObject();
studentObj.put(student.getStudentID(), student);
in.close();
System.out.println("here " + studentObj.size());
FileOutputStream fos = new FileOutputStream(DEFAULT_FILE_NAME);
OutputStreamWriter osw = new OutputStreamWriter(fos);
Writer w = new BufferedWriter(osw);
// Iterate using YOUR hash keys
for(int i = 0; i < studentObj.size(); i++){
w.write(studentObj.get(i).getString());
w.write(studentObj.get(i).getStudent());
}
w.close();
catch (IOException e) {
throw new Exception("FILE IS NOT CREATED");
} catch (ClassNotFoundException e) {
throw new Exception("CLASS NOT FOUND EXCPETION");
}
}
を書いて、ちょうど直接のObjectInputStreamから引き出されたデータを書き込むことができ、@のxdevs23に同意
HashMap<String, Student> studentObj = new HashMap<>(SIZE);
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(DEFAULT_FILE_NAME));
studentObj = (HashMap<String, Student>) in.readObject();
studentObj.put(student.getStudentID(), student);
ObjectOutputStream out;
out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(DEFAULT_FILE_NAME)));
out.writeObject(studentObj);
out.flush();
System.out.println("here " + studentObj.size());
in.close();
out.close();
} catch (IOException e) {
throw new Exception("FILE IS NOT CREATED");
} catch (ClassNotFoundException e) {
throw new Exception("CLASS NOT FOUND EXCPETION");
}
例外のスタックトレースを出力します: 'e.printStackTrace()'。これは遭遇した問題について教えてくれるでしょう。 –
データを処理して保存することをおすすめします。 'ObjectOutputStream'を使用する代わりにテキストファイルとして出力します。あなたはfor-loopを実行し、配列にデータを保存し、それらを適切に再読み込みできるように保存することができます。 – xdevs23
さまざまな例外をキャッチして基本的な例外として投げることに本当の意味はありません。これらの例外を処理するか、それらの特定の例外をスローするか、単にどのような種類のものであるか気にしない場合は、単に例外をスローします。あなたの例外のスタックトレースを印刷すると、どこに問題があるかがわかります。 – ManoDestra