0

最近、ユーザー用にシリアルファイルを作成しました。ユーザーがログインしようとしたときに読み取ったもの。新しいユーザーが登録した場合は、ユーザーを追加します。しかし、新しいユーザーを追加するたびに、追加した前のレコードが削除されます。シリアルファイルにオブジェクトを追加する方法はありますか? P.Simは、ユーザー名、パスワード、役割(インストラクターまたは学生)、およびスコア(int)変数を含むユーザーのオブジェクトを使用しています。シリアライゼーション:Javaでのオブジェクトファイルへの追加

public static void addRecordStudent(String userName, String password, String role, int score) 
{ 
    openFile(); 
    try 
    { 
     // create new record; this example assumes valid input 
     User usr = new User(userName, password, role, score); 
     // serialize record object into file 
     output.writeObject(usr); 
    } 
    catch (NoSuchElementException elementException) 
    { 
     System.err.println("Invalid input. Please try again."); 
    } 
    catch (IOException ioException) 
    { 
     System.err.println("Error writing to file. Terminating."); 
    } 
    closeFile(); 
} 

public static void openFile() 
{ 
    try 
    { 
     output = new ObjectOutputStream(Files.newOutputStream(Paths.get("users.ser"))); 
    } 
    catch (IOException ioException) 
    { 
     System.err.println("Error opening file. Terminating."); 
     System.exit(1); // terminate the program 
    } 
} 

public static void closeFile() 
{ 
    try 
    { 
     if (output != null) 
     output.close(); 
    } 
    catch (IOException ioException) 
    { 
     System.err.println("Error closing file. Terminating."); 
    } 
} 
+0

また、 – Ravi

+0

を投稿すると、質問の一部としてコメントとして投稿する必要があります。 – Ravi

+0

完了、新しいサイトです。 –

答えて

0

あなたはexplicitly fileするappendするchooseするhave - otherwise old contentはreplacedさwill:

Files.newOutputStream(file、StandardOpenOption.APPEND

そのにadditionて、every timeあなたがnew ObjectOutputStreamがnew createストリームが開始されます。単一のObjectInputStreamを使用してそれらを読み取ることはできません。 this trick

ファイルが大きすぎない場合は、既存のオブジェクトをすべて読み取り、単一のObjectOutputStreamを使用して既存のオブジェクトと新しいオブジェクトを書き戻す方がよい場合があります。

関連する問題