2011-08-18 4 views
0

다음 작업을 수행하는 방법을 모릅니다. 정말 큰 텍스트 파일 (거의 5 기가 바이트)을 처리하고 싶습니다. 파일을 임시 메모리에 복사 할 수 없기 때문에 처음 500 줄을 읽거나 (메모리에 잘 들어 맞았는지 아직 알지 못합니다), 그걸로 뭔가를하고 다음 500 단계로 넘어갈 때까지 생각했습니다. 나는 전체 파일로 끝났어.거대한 파일의 줄을 읽는 중

"루프"또는 명령에 대한 예를 게시 할 수 있습니까? 내가 시도한 모든 방법이 처음부터 다시 시작 되었기 때문에 나는 이전 500 행을 끝내고 나서는 것을 계속하고 싶다.

감사합니다. 당신은 당신이 특정 로직을 기반으로 새 파일을 작성, 특정 라인을 유지하려면 그 위의 주석에 표시되도록

+0

텍스트를 읽은 다음 (즉, 수정 된 텍스트를 다시 파일에 쓰는) 텍스트를 수정 하시겠습니까? 아니면 본질적으로 읽기 전용으로 데이터를 가져 오시겠습니까? –

+0

특정 패턴에 맞는 선을 새 파일에 쓰고 싶습니다. 결국 원래 패턴에서 일치하는 모든 선을 포함하는 새 파일을 갖게됩니다. 원본을 수정해서는 안됩니다. – Grrace

답변

1
BufferedReader br = new BufferedReader(new FileReader(file)); 
String line = null; 
ArrayList<String> allLines = new ArrayList<String>(); 

while((line = br.readLine()) != null) { 
    allLines.add(line); 
    if (allLines.size() > 500) { 
      processLines(allLines); 
      allLines.clear(); 
    } 
} 

processLines(allLines); 
+0

감사합니다. 귀하의 예제에 대한 질문이 있습니다 : _allLines.size()> 500_ 내가 추가 한 실제 행 수를 참조합니까 (3000을 추가하면 그 크기가됩니다)? 나는 항상 "size"가 ArrayList의 전체 길이를 참조 할 것이라고 생각했지만, 제대로 이해한다면 그것은 Elements의 수입니다 ...? 그게 정말 많은 도움이됩니다! – Grrace

+0

한 번에 500 줄로 읽는 것에 대해 언급했습니다 ... –

+0

네, 죄송합니다. 내 의견은 아직 완성되지 않았습니다. 내가 누르는 수익이 새로운 라인을 만들지는 모르겠다 ;-) – Grrace

0

좋아. 한 번에 한 줄씩 읽을 수 있으며 파일을 보관할지 여부를 결정할 수 있습니다. 이 접근법은 한 번에 한 줄씩 메모리에 유지하기 때문에 아주 적은 메모리를 사용합니다.