2008-10-14 8 views
8

파일의 첫 번째 줄만 바꾸고 싶은 텍스트 파일이 있습니다. 파일은 수백만 행이 될 수 있으므로 모든 것을 반복 할 필요가 없으므로이 작업을 수행 할 다른 방법이 있는지 궁금합니다.자바에서 텍스트 파일의 첫 줄 바꾸기

특정 단어의 인스턴스를 다른 단어로 바꿀 수 있도록 일부 규칙을 첫 번째 줄에 적용하고 싶습니다.

이것이 가능합니까?

답변

15

RandomAccessFile은 결과 행의 길이가 원래 행의 길이와 다른 경우가 아니면 트릭을 수행합니다.

복사를 수행해야하는 경우 (첫 번째 줄이 대체되고 나머지 데이터는 그대로 복사됩니다) BufferedReaderBufferedWriter을 사용하는 것이 좋습니다. 먼저 BufferedReaderreadLine()을 사용하여 첫 번째 행을 읽습니다. 그것을 수정하고 BufferedWriter에 씁니다. 그런 다음 char[] 배열을 사용하여 파일의 나머지 부분을 무차별 강제로 복사하십시오. 이것은 한 줄씩 복사하는 것보다 더 효율적입니다. 세부 사항이 필요한 경우 알려주십시오.

또 다른 옵션은 동일한 파일 내에서 읽기 및 쓰기를 수행하는 것입니다. 그것은 조금 더 복잡 할 것이다. :) 이것에 대한 자세한 내용이 필요하면 알려주십시오.

+0

대체 할 문자열의 길이가 다른 경우 pls에서 정보를 제공 할 수 있습니까? 새로운 파일에 복사하지 않고도 가능합니다. – png

+0

길이가 다른 경우 최소한 동일한 파일이나 다른 파일에 모든 바이트를 다시 써야합니다. – volley

+0

누구나 RandomAccessFile에서이 작업을 수행하는 방법에 대한 코드 예가 ​​있습니까? – jymbo

2

RandomAccesssFile을 원합니다. 파일을 사용하면 파일에서 원하는 위치에 읽고 쓸 수 있습니다.

이것은 InputStream 및 OutputStream과 매우 유사하지만 원하는 곳 어디서나 읽고 쓸 수 있습니다.

1

한 번만 정규식을 적용하십시오. String.replaceFirst ("regex", "replacementstring") : http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#replaceFirst(java.lang.String,%20java.lang.String)

파일을 RandomAccessFile로 엽니 다. 첫 번째 줄을 문자열로 읽어 들인 다음 변경 내용을 적용한 다음 문자열을 다시 씁니다.

+0

라인 1의 길이가 변경되지 않는 경우에만 – Cheekysoft

+0

"파일이 수백만 행이 될 수 있습니다"- regexps와 함께 행운을 빕니다! LOL –

3

새 행의 원래 첫 행과 다른 문자 (바이트)가있는 경우 갭을 없애거나 두 번째 행의 일부를 덮어 쓰지 않도록 전체 파일을 다시 써야합니다.

물론 String.replaceFirst(String regex, String replacement) (javadoc) 또는 RandomAccessFile (javadoc)과 같은 다양한 도구를 사용하면이 작업을 수행하는 데 도움이 될 수 있습니다.

관련 문제