2010-11-26 5 views
2

나는 이것에 대한 질문이 있었는지 알아보기 위해 조사하고 있었지만 분명히 그렇게하지는 않았다. 현재 BufferedReader를 사용하여 텍스트 파일을 읽고 있습니다. 내 유일한 문제는 내 파일의 마지막 줄만 읽으 려한다는 것입니다. IE : 파일에 10 번 쓰기, 10 번째 항목을 가져오고 싶습니다. 필자는 제 10 번째 라인에 도달 할 때까지 각 라인을 읽는 루프를 쉽게 돌릴 수 있었지만, 파일이 계속 증가하고 100 개 이상의 엔트리가 될 수 있기 때문에보다 효율적인 방법이 있는지 궁금합니다.Java에서 텍스트 파일의 끝 부분을 효율적으로 가져 오는 방법은 무엇입니까?

또한 가능한 경우 외부 패키지를 사용하지 않을 것입니다.

감사합니다.

+2

병목 현상이있는 것으로 입증되기 전에 코드를 최적화하지 마십시오. 어떻게 할 수 있는지 설명하고 그것이 얼마나 잘 작동하는지 확인하십시오. – oherrala

답변

4

100 줄을 읽는 것이 거의 문제가되지 않습니다. 그것은

거꾸로 텍스트 파일을 읽을 수 수 있지만 :

  • 인코딩에 따라, 그것은 매우 어려울 수 있습니다. 특히 다른 문자에 대해 가변 폭을 갖는 인코딩이지만 문자의 시작 부분이 명확하지 않은 문자 인코딩
  • 좋은 경우에도 실제로는보기 흉한 코드입니다. 그것은 C#으로 - 당신은 그것이 얼마나 끔찍한보고 싶다면 당신은 내가이 Stack Overflow question에 몇 가지 코드를 가지고, 등

, 라인이 시작되는 파일에서 뒤로 건너 뛰는 운동을 계속해야 그러나 당신은 합리적으로 쉽게 이해할 수 있어야합니다. 당신이 그것을하지 않도록 설득하는 것으로 충분합니다.

100,000 줄의 파일이 있다면 그만한 가치가있을 것입니다.하지만 100? 안돼. 전체 파일을 읽으십시오.

+0

파일을 읽는 중 가장 큰 지연은 디스크에서 꺼내는 것입니다. 4K 미만의 파일의 경우이 시간에는 차이가 없습니다. 64K 미만의 파일의 경우에는 그 차이를 알 수 없습니다. –

0

파일 길이가 이미 알고있는 경우에만이를 수행하는 유일한 방법입니다. 당신은 단지 그것을 반복해야 할 것입니다. 100 개 이상의 회선은 10 회 이상의 회 돌이를 처리하는 데 오래 걸리지 않습니다. 이제 백만 라인이 있다면 데이터베이스 나 비슷한 것으로 가고 싶을 것입니다.

0

사용할 수있는 클래스는 FileChannel입니다. 문제는 (어떤 언어로든) 줄의 정확한 길이를 알지 못하는 한 마지막 줄을 얻기 위해 파일에서 어디에 위치해야할지 모른다는 것입니다. 합리적인 라인 길이를 얻기에 충분할만큼 백업 한 다음 앞으로 검색하십시오.

3

파일이 잘못된 도구 일 수 있습니다. 텍스트 파일의 출처는 어디입니까? 데이터베이스 테이블에 라인을 삽입하는 것은 어떻습니까? 마지막 행을 찾는 것은 매우 쉽고 빠릅니다.

+1

이것이 질문에 답하지는 못하지만, 나는 더 동의하지 않을 것이므로 투표 할 자격이 있습니다. – BalusC

+0

감사합니다. @BalusC. 나는 고집에서 벗어난 그 질문에 대답하지 않겠다는 뜻이 아니라 그 대신에 그 일을 성취 할 수있는 또 다른 방법을 제시합니다. 때로는 너무 구체적인 질문을합니다. 나는 운 좋게도 나는 괴짜 친구들을 사귀고 나를 한 발 뒤로 물러나게합니다. –

관련 문제