0

나는 라이브러리 시스템에 대한 멤버를 등록하는 프로그램을 만들었습니다. 데이터를 저장하려면 텍스트 파일을 사용하고 직렬화를 읽거나 쓸 수 있어야합니다.추가하는 동안 파일에 객체 쓰기

내 문제는 회원 한 명을 등록하고 다른 회원을 등록하려고 할 때 두 번째 회원 기록이 저장되지 않는다는 것입니다. 파일에 쓰기를 추가하기 위해 "true"라는 키워드를 사용했습니다. 여기

내가 무엇을했는지 있습니다 :

//Am writing the object to a file 

    public void RegisterMembers(Members object) { 
     try{ 

     FileOutputStream write=new FileOutputStream("Memberships.txt",true); 
     ObjectOutputStream writeFile=new ObjectOutputStream(write); 

     writeFile.writeObject(object); 
     writeFile.flush(); 
     writeFile.close(); 

     }catch(Exception e){ 
       Frame frame=new Frame(); 
      JOptionPane.showMessageDialog(frame,"Storage file not found"); 
     } 


} 


    //Method to read from the file 
    public void readMemberships() throws FileNotFoundException, IOException, ClassNotFoundException{ 
      Person object; 


       FileInputStream read=new FileInputStream("Memberships.txt"); 
       ObjectInputStream readFile=new ObjectInputStream(read); 

       object=(Person)readFile.readObject(); 

      System.out.println(object); 



    } 

//Here is a piece of code which is in the gui frame which i implemented 
     Members newMember=new Members(firstName,initials,birthDay,birthMonth,birthYear,Gender,memberid,address,tele,membershipType,paymentType); 

     newMember.RegisterMembers(newMember); //calls the 2 methods 

     newMember.readMemberships(); 

무슨 일이 오류를 것 같다? 나는 그것을 쓸 때 추가하기를 원한다.

감사합니다.

+1

이것은 좋은 디자인이 아니며 여러 객체 출력 스트림을 하나의 파일에 저장하고 현재 디자인으로 객체를 deserialize하는 방법은 무엇입니까? ( 불특정 예외를 잡기 없습니다 "; (저장 파일을 찾을 수 없습니다" } JOptionPane.showMessageDialog, 프레임) "} 캐치 (예외 전자) { 프레임 프레임 = 새로운 프레임()" –

+0

같은 코드를 사용하지 마십시오 일부 하위 유형)이 잘못되었습니다. JOptionPane의 파라미터를 가지기 위해서 (때문에) 프레임을 작성하는 것은 나쁘다 (의심되는 경우는 null를 건네 준다). – Matthias

답변

2

내가 만든 주제 (지금 해결됨)는 당신이 찾고있는 주제라고 생각합니다.

"ObjectOutputStream을 사용하여 만든 기존 파일에는 적어도 노력을 기울이지 않고 추가 할 수 없습니다. ObjectOutputStream을 확장하고 스트림 헤더를 쓰지 않도록`writeStreamHeader() 메서드를 재정의하는 방법이 있습니다.

또한

아래 링크 그것은 당신이 찾고 있던 무슨 확인할 수 있습니까?