2013-01-01 2 views
0

나는 매번 파일의 맨 아래에 텍스트 파일에 문자열을 쓰려고합니다. 그리고 나서 텍스트 파일에서 특정 문자열을 검색하여 찾으면 그 행을 다른 것으로 대체하려고합니다.문자열을 텍스트 파일의 맨 아래 줄에 씁니다

나는이 생각 : Textfile에 행을 계산하고 +1을 추가하고 그 색인에 쓰고 싶은 문자열을 씁니다. 그러나 텍스트 파일의 특정 줄 번호에 쓸 수 있습니까?

그리고 특정 행을 다른 문자열로 업데이트하는 방법은 무엇입니까?

감사합니다.

+0

무엇을 이미 시도 했습니까? 코드 pls를 표시하십시오 – DRastislav

답변

0
  1. 당신이 문자열을 추가 할 경우 추가를 위해 열 수 있도록 true로 설정할 수 FileOutputStream에 does have an alternate constructor.

  2. 당신이 그것을을 복사하지 않고 파일에 문자열을 대체하는, 말,하고 싶은 경우, 가장 좋은 건 대신 RandomAccessFile에 의존하는 것입니다. 그러나, 선로 길이가 가변적이라면, 이것은 신뢰할 만하다. 고정 길이 레코드의 경우,이 같은 일을한다 : 오프셋

  3. 쓰기에

    • 이동, 그래서 만약

당신은 또한 (SetLength를 통해) '잘라 내기'가하는있을 수 있습니다 당신이 제거해야 할 후행 블록, 당신은 그렇게 버릴 수 있습니다.

제 3의 해결책은 mmap에 의존하는 것입니다. 전체 파일을 보려면 Memory-Mapped Bytebuffer이 필요합니다. 나는 솔루션의 전체 타당성을 고려하지 않고있다. (이것은 평범한 C 언어로 동작한다.)하지만 실제로는 자바 플랫폼 + 운영체제 모두를 고려할 때 더 정확하다.

+0

입력 파일을 수정해야하는 경우 "이중 쓰기"프로토콜을 사용하는 것이 좋습니다. 전체적으로 더 안전합니다. – fge

+0

"이중 쓰기 프로토콜"이 될 수있는 것에 대한 조언을 해 줄 수 있습니까? 개념은 친숙 해 보이지만, 우리가 같은 페이지에 있는지 알고 싶습니다. – aldrinleal

+0

저는 안전성에 대해 논하지는 않겠지 만, 알고리즘과 파일 시스템 의미론에 대해서는 설명하지 않습니다. 신뢰성 문제는 구현 자에게 맡기는 것이 가장 좋습니다. – aldrinleal

4

당신은하고 싶지 않다. 그것은 재앙을위한 조리법입니다. 원본 파일을 수정하는 동안 파일을 쓰지 못하면 원본 파일이 손상됩니다.

쓰기가 인 경우에만 이중 쓰기 프로토콜을 사용하고 수정 된 파일을 다른 파일에 쓰고 을 쓰고 해당 파일의 이름을 원래 파일 이름으로 바꿉니다.

"big"의 정의에 따라 파일 크기가 너무 크지 않은 경우 대상 파일에 List<String>을 생성하는 것이 좋습니다. 원본 파일을 한 줄씩 읽고 해당 목록에 추가하십시오. 목록 처리가 완료되면 (실제로 일어날 일이 무엇인지 명확하지 않은 질문이있는 경우) 각 파일 String을 다른 파일에 쓰고 플러시하고 닫은 다음 성공하면 원본으로 이름을 바꿉니다.

+0

원래 질문과의 관계는 무엇입니까? 그 말을 다른 곳으로 옮길 뜻이 없다고 확신합니까? : p – fge

+0

죄송합니다. 완료되기 전에 입력을 클릭하십시오. 온라인 진드기 게임을 만들고 있는데 로그인 웹 사이트가있어서 계정이 있어야합니다. 새로운 사용자라면 텍스트 파일의 하단에 정보를 입력해야합니다 (계정 정보 : 사용자 이름, 암호, 총 승리 및 총 손실). 새로운 사용자가 아닌 경우. 게임을 할 때 우승 한 선수의 라인과 다른 플레이어의 라인도 업데이트해야합니다. 지금은 모든 선을 arraylist로 읽고 요소를 수정 한 다음 전체 arraylist를 파일로 작성합니다. 내 서버가 끊어지면 문제가 될 것입니다. : P – Henrik

+0

[Files.readAllLines] (http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#readAllLines%28java.nio.file.Path,%20java .nio.charset.Charset % 29) 및 [Files.write (Path, Iterable, Charset)] (http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html # write % 28java.nio.file.Path, % 20java.lang.Iterable, % 20java.nio.charset.Charset, % 20java.nio.file.OpenOption ... % 29) 메소드는이 접근법을 매우 쉽게 만들어줍니다. – VGR

관련 문제