2014-10-05 5 views
0

파일로 출력해야하는 Java 프로그램이 있습니다.Java에서 텍스트 파일의 일부 덮어 쓰기

이 출력 파일이 고정 된 구조를 가지고,의는 헤더하는 START 라인, 내 출력, END 라인과 바닥 글을 가정 해 봅시다.

프로그램을 실행할 때마다 해당 START-END 부분 사이에 출력을 쓰려고합니다. 그리고 텍스트가 있다면, 을 덮어 쓰고 싶습니다.

지금까지 행을 감지 할 때까지 줄 단위로 읽는 중입니다. 그런 다음 출력을 작성합니다. 앞에서 말했듯이, 출력물 뒤에 "END"줄이 있습니다.

내 의심의 여지가 나는 START 모든 실행 (새로운 출력)에 대한 END (이전 출력) 사이에있는 텍스트를 덮어 쓸 수있는 방법입니다.

+0

코드는 어디에 있습니까? 당신이 기대하는 바는 무엇이며, 대신 무엇을합니까? –

+0

* START * 줄을 찾은 직후에 쓸 수있는 시작 지점을 찾을 수 있습니다. 두 번째로 프로그램을 실행하면, 이렇게되면 다른 프로그램보다 먼저 새 출력이 추가됩니다 (시작 지점 바로 다음에 ...). –

+0

코드에서 버그를 발견 할 수 없으며 코드를 보지 않고 버그를 수정하는 방법을 제안합니다. 코드를 게시하십시오. –

답변

1

RandomAccessFile 클래스에 익숙합니까? Header + START와 End + Footer 마커 사이에 가변 길이의 본문을 작성한다고 가정합니다. 즉, 본문 부분을 덮어 쓰고 테일링 바이트를 앞으로 밀어 올릴 수는 없습니다.

가장 쉬운 구현은 어쨌든 구현하기 시작한 방법 일 수 있습니다.

  • 열기 RandomAccessFile에 액세스
  • END 지수의 시작을 발견 뒤로 때까지 끝에서
  • 읽기 바이트, 바이트 뒤로 읽는 동안 tailBuffer에 넣어 된 인덱스 기억 찾기 또는 START 지수의 끝으로 건너 뛰기
  • 다시 STARTINDEX + 1로 위치를 구하고 시작 블록의 끝에 트림
  • 호 raf.setLength (startLen + bodylen + endLen)를 새로운 바디 바이트를 쓰거나 (전후 반전 읽기 쓰기 때문에 정렬된다) 따라서 새 파일 길이를 늘리십시오.
  • 이 파일의 끝에 tailBuffer 쓰기 있는지 확인 쓰기는이를 구현하거나 인덱스, 새로운 콘텐츠와 파일 덮어 쓰기 파일을 찾을 수 RAM에 모든 것을 읽어 하나 개의 방법이 될 수있는 적절한 순서

에 반전됩니다. RAM이 문제가되지 않는다면 괜찮습니다.