2013-05-01 3 views
0

여러 개의 다른 클래스 인스턴스를 작성하고 작성하는 프로그램이 있습니다. DataOutputStream을 사용하여 각 인스턴스의 세부 사항을 파일에 쓰고 싶습니다 (필요한 연습입니다. 나중에 다른 방법을 살펴 보겠습니다).하지만 문제는 새 인스턴스가있을 때마다 DataOutputStream이 파일을 덮어 씁니다. 창조되고 쓰여졌다. 첫 번째 아이디어는 새 인스턴스가 작성 될 때마다, 먼저 DataInputStream을 사용하여 파일에있는 내용을 가져 와서 저장 한 다음 새 인스턴스로 다시 작성하는 것입니다. 이것은 매우 혼란 스러울 수있는 것처럼 보입니다. 이런 식의 모범 사례는 무엇일까요? 미리 감사드립니다.DataOutput/InputStream을 사용하여 파일 바이트 관리

편집 : 여기에서 내가하려고하는 것에 대해 좀 더 구체적으로 시도해 보겠습니다. 파일에 쓰려는 클래스를 가져 오려면 먼저 dataInputStream.readFully를 사용하여 파일의 모든 항목을 가져옵니다. 내 이해는 파일의 모든 바이트를 가져 와서 배열에 저장하는 것입니다. 이 인스턴스를 클래스 인스턴스와 비교하고 인스턴스가 이미 파일에있는 것과 일치하는 경우이 특정 인스턴스를 파일에 출력하지 마십시오 (이미 있기 때문에). 그렇지 않으면 파일에 추가하십시오.

답변

0

쓰기 위해 파일을 열 때 FileOutputStream(File file, boolean append) 생성자를 사용하십시오. 예를 들면 : 당신이 당신의 객체를 직렬화해야하는 경우

File f = new File("C:\data.txt"); 
FileOutputStream fos = new FileOutputStream(f, true); // open file for appending 
DataOutputStream dos = new DataOutputStream(fos); 
// anything written to dos after this point will be appended 

, 나는 매우 API를 마샬링/JAXB 또는 다른 직렬화를 사용하는 대신 바퀴를 재발 권 해드립니다. 잠재적으로 엄청난 시간을 절약 할 수 있습니다.

+0

필자는 이것이 중복 검사를 수행하지 않는다고 가정하고 있습니다. 속임수를 없애기 위해 뭔가 쓸 필요가 있습니다. – Benny

+0

이것은 기존 파일의 맨 끝에 추가됩니다. 다른 점을 염두에두면 예상되거나 원하는 동작 (의사 코드 또는 코드도 도움이 됨)에 대한 자세한 설명을 포함하여 질문을 편집하거나 새로운 질문을 제안하는 것이 좋습니다. 그러나 JAXB 또는 JavaBeans Serialization 또는 다른 유사한 API를 조사하고 싶을 수도 있습니다. 해결할 문제 (디스크에 데이터 직렬화)가 이미 해결 되었기 때문입니다. – rob

+0

필자는 직렬화를 완전히 사용 하겠지만, 작업을 수행하려고하는 특정 운동입니다. 나는 문제를 더 잘 설명하려고 편집했다. 감사 – Benny