如何在BufferedWriter中获取缓冲区

时间:2017-12-27 14:15:29

标签: java character-encoding bufferedwriter

我正在使用BufferedWriter在java中编写一个文件。这是我的代码 -

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();
    }
}

我想报告当前写入缓冲区的内容,因为它包含" Unmappable字符"根据cp1252。 目前,我们正在尝试维护另一个缓冲区来保存内容,但我想知道是否有更好的方法来实现相同的目标。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

您可以撰写与CustomBufferedWriter类似的BufferedWriter,并在您的实施中为cb添加一个getter。