2011-10-13 2 views
0

나는이 사용하는 데이터의 일부 금액을 가진 파일을 작성하려고 해요 :자바에서 큰 텍스트 파일을 작성하는 가장 효율적인 방법은 무엇입니까?

public static <T extends SomeClass> void writeFile(String buffer, Class<T> clazz, int fileNumber) { 
    String fileType = ".txt"; 
    File file = new File(clazz.getName()+fileNumber+fileType); 
    PrintWriter printWriter = null; 


    try { 
     FileWriter writer = new FileWriter(file); 
     printWriter = new PrintWriter(writer); 
     printWriter.print(buffer);//error occurs here 
     printWriter.flush(); 
     printWriter.close(); 
     System.out.println("created file: "+file.getName()); 


    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally{ 
     if(printWriter!=null){ 
      printWriter.flush(); 
      printWriter.close(); 
     } 
    } 
    System.out.println("Done!"); 
} 

버퍼 문자열의 데이터 + -6mb를 포함하고 내가 코드를 실행하면 내가 정확히 java.lang.OutOfMemoryError와를 얻을 수 버퍼에.

+0

Java VM에 -Xmx 명령 줄 옵션을 사용하여 적절한 메모리를 할당 했습니까? –

+0

단일 호출 대신 작은 블록으로 버퍼를 쓰려고 했습니까? – millimoose

+0

덧붙여 말하자면, 필자는 PrintWriter.write가 메모리를 사용하는 이유는 전체 문자열을 바이트 배열로 인코딩 한 다음 쓰기 때문이라고 생각합니다. –

답변

1

을 무엇으로 printWriter.print(buffer); 교체에 대한 :

for (int i = 0; i < buffer.length; i += 100) { 
    int end = i + 100; 

    if (end >= buffer.length) { 
     end = buffer.length; 
    } 

    printWriter.print(buffer.substring(i, end); 
    printWriter.flush(); 
} 
+2

프로그래머는 요즘 메모리를 많이 사용하는 데 익숙하지만 절대로 생각하지 않습니다. 인생은 균형에 관한 것입니다. – Thom

+0

@Thom : 당신에게 동의하지만, 균형은 올바른 방법으로 가지고있는 자원으로서 최대한의 것을 사용한다는 것을 의미합니다. ;) –

+1

균형이란 올바른 양의 자원을 올바른 방법으로 사용한다는 것을 의미합니다. – Thom

관련 문제