2017-12-27 5 views
2

Ich schreibe eine Datei in Java mit BufferedWriter. Hier ist mein Code -Wie bekomme ich Zugang zu Puffer in 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(); 
    } 
} 

Ich möchte den Inhalt des aktuellen Puffers des Schriftstellers berichten, wie es die „nicht zuzuordnenden Charakter“, wie pro cp1252 enthält. Derzeit versuchen wir, einen weiteren Puffer für den Inhalt zu erhalten, aber ich würde gerne wissen, ob es einen besseren Ansatz gibt, um den gleichen zu erreichen.

+1

können Sie den Inhalt nicht von dem Inhalt abrufen, den Sie gerade schreiben. – eatSleepCode

+0

@eatSleepCode Ich halte den Inhalt in einem anderen Puffer wie erwähnt. Aber es ist ein Overhead. –

Antwort

1

Sie können eine CustomBufferedWriter schreiben, die auf BufferedWriter ähnlich ist und einen Getter für cb in Ihrer Implementierung hinzuzufügen.

1

Wenn ich richtig verstehe, möchten Sie den Inhalt des BufferedWriter-Puffers melden. Sie können das tun, indem Sie die API Reflection verwenden.

Der folgende Code sollte den Pufferinhalt abrufen:

// 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

Ja, das ist einer der Ansätze für sicher! Danke für Ihre Antwort. Die Verwendung von Reflektionen für andere APIs ist jedoch ein wenig schwierig. –

Verwandte Themen