2017-11-16 11 views
2

Person 유형이 3 개인 객체를 Person.person에 파일로 작성하고 하나씩 읽지 만 프로그램을 다시 실행할 때 내가 firts 시간에 그것을 실행할 때 쓰는 것과 똑같은 3 개의 objets을 얻는다. 내 프로그램을 실행할 때마다 그 3 개의 오브젝트를 내 파일에 반복해서 추가하는 방법. 나는 그것으로부터 동일한 3 개의 오브젝트 또는 다른 오브젝트가되기를 바란다. 하지만 파일의 끝에 추가해야합니다.자바에서 프로그램을 실행할 때마다 파일에 객체를 추가하는 방법

그리고 그 파일을 읽을 때 그 데이터를 얻는 방법은 무엇입니까?

package pisanjeUFajl; 

import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.EOFException; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.util.List; 

public class Serilizacija { 
public static void main(String[] args) throws IOException, 
ClassNotFoundException { 

    Person person = new Person("Jovan", "Dukic"); 
    Person person2 = new Person("Stanko", "Maca"); 
    Person person3 = new Person("Tole", "Lopove"); 

    File file = new File("C:\\Users\\Jovan\\Desktop\\Person.person"); 
    if (!(file.exists())) { 
     file.createNewFile(); 
    } 

    ObjectOutputStream outputStream = null; 

    outputStream = new ObjectOutputStream(new BufferedOutputStream(new 
    FileOutputStream(file))); 

    outputStream.writeObject(person); 
    outputStream.reset(); 
    outputStream.writeObject(person2); 
    outputStream.reset(); 
    outputStream.writeObject(person3); 
    outputStream.reset(); 

    outputStream.close(); 

    ObjectInputStream inputStream = null; 

    inputStream = new ObjectInputStream(new BufferedInputStream(new 
    FileInputStream(file))); 
    int count = 0; 
    Person object = null; 

나는 내 파일에 더 많은 개체를 추가하지만 난 그들을 읽고 싶어 할 때 내가 가지고 오류 : "주"java.io.StreamCorruptedException가 스레드 예외 : 유효하지 않은 타입 코드 : AC

at java.io.ObjectInputStream.readObject0(Unknown Source) 
at java.io.ObjectInputStream.readObject(Unknown Source) 
at pisanjeUFajl.Serilizacija.main(Serilizacija.java:46) 

첫 번째 파일에 추가 된 처음 3 개의 개체 만 읽습니다.

try { 
     while (true) { 
      object = (Person) inputStream.readObject(); 
      count++; 
      System.out.println(object); 

     } 
    } catch (EOFException error) { 
     System.out.println("\nEnd of file reacher - objects read = " + 
    count); 
    } 

    inputStream.close(); 
} 

}

답변

1
Use for writing object  
ObjectOutputStream outputStream = new ObjectOutputStream(new 
         FileOutputStream(new File("test"))); 



Use it for appending object at end of file 
ObjectOutputStream outputStream2 = new ObjectOutputStream(new FileOutputStream("test", true)) { 
        protected void writeStreamHeader() throws IOException { 
         reset(); 
        } 
       }; 

(새 FileInputStream에 ("테스트")) ObjectInputStream에 inputStream을이 = 새의 ObjectInputStream를 읽어; 유효하지 않은 유형 코드 : "주" java.io.StreamCorruptedException가 스레드에서 예외 : java.io.ObjectInputStream.readObject0에서 AC \t (알 수없는 소스) \t에서

+0

내 코드에서 outputStream2를 사용하는 방법에 대해 잘 모릅니다. 당신은 내가 outputStream2.writeObject()를 사용해야 할 때보 다 outputStream.writeObject()를 사용하여 객체를 작성해야한다고 말했기 때문에 내 객체에서 호출 할 수 있습니까? –

+0

outputStream2. writeObject (새 TestSomeObject()); outputStream2 .close(); –

0

를 사용하여 매개 변수로 부울을 받아 FileOutputStream에의 생성자입니다. true로 설정된 경우이 스트림을 통해 파일에 기록 된 모든 항목이 기존 내용에 추가됩니다. 생성자는 다음과 같습니다

FileOutputStream(File file, boolean append) 
+0

는 나는 내가 내 파일을 읽을 수 오류가 발생했습니다 java.io.ObjectInputStream.readObject (Unknown Source) \t at pisanjeUFajl.Serilizacija.main (Serilizacija.java:46) –

+0

죄송합니다. 물론 전체 코드를 모르겠지만이 대답은 도움이 될 것이라고 생각합니다. https://stackoverflow.com/a/2395269/8944371 – JDevMAN