2017-12-27 10 views
2

BufferedWriter로 java로 파일을 작성하고 있습니다.BufferedWriter에서 버퍼로 접근하는 방법

public static void main(String[] args) { 
    try(BufferedWriter writer = Files.newBufferedWriter(filePath, Charset.forName("CP1252"))) { 
     while (thereIsContentToWrite){ 
      writer.write(content); 
     } 
    }catch (CharacterCodingException ce){ 
     //get content of writer's current buffer (java.io.BufferedWriter.cb) 
    }catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

나는 그것이 CP1252에 따라, "맵 불가 문자"를 포함로 작가의 현재의 버퍼의 컨텐츠를보고 싶어 - 여기 내 코드입니다. 현재, 우리는 내용을 담을 다른 버퍼를 유지하려고 노력하고 있지만 같은 것을 달성하기위한 더 나은 접근 방법이 있는지 알고 싶습니다.

+1

당신이 쓰는'content'에서 내용을 가져올 수 없습니다. – eatSleepCode

+0

@eatSleepCode 언급 한대로 다른 버퍼에 콘텐츠를 보관합니다. 그러나 그것은 오버 헤드입니다. –

답변

1

당신은 BufferedWriter 유사한 CustomBufferedWriter을 쓸 수 및 구현에 cb에 대한 게터를 추가

다음 코드는 버퍼 내용을 검색합니다.

1

올바르게 이해하면 BufferedWriter 버퍼의 내용을보고하고자합니다. Reflection API를 사용하여이를 수행 할 수 있습니다.

// BufferedWriter buffer is the private field "cb" 
Field bufferField = writer.getClass().getDeclaredField("cb"); 
// We make this field accessible so we can retrieve its contents 
bufferField .setAccessible(true); 
// We can now get the data 
char[] buffer = (char[]) bufferField.get(writer); 
+0

네, 이것이 확실한 접근법 중 하나입니다! 답장을 보내 주셔서 감사합니다. 그러나 다른 API에 리플렉션을 사용하는 것은 약간의 까다 롭습니다. –

관련 문제