All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.chrlembeck.util.io.CountingWriter Maven / Gradle / Ivy

package de.chrlembeck.util.io;

import java.io.IOException;
import java.io.Writer;

/**
 * Writer, der die Anzahl der geschriebenen Zeichen und Zeilen während des schreibens zählt.
 *
 * @author Christoph Lembeck
 */
public class CountingWriter extends Writer {

    /**
     * Writer, in den die Zeichen nach dem Zählen geschrieben werden.
     */
    private Writer writer;

    /**
     * Anzahl der geschriebenen Zeichen.
     */
    private long characterCount;

    /**
     * Anzahl der geschriebenen Zeilen.
     */
    private long lineCount = 1;

    /**
     * Erstellt einen neuen Writer mit dem übergebenen Writer als Ziel.
     * 
     * @param writer
     *            Writer, in den die Zeichen nach dem Zählen geschrieben werden sollen.
     */
    public CountingWriter(final Writer writer) {
        this.writer = writer;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void write(final char[] cbuf, final int off, final int len) throws IOException {
        writer.write(cbuf, off, len);
        characterCount += len;
        for (int i = 0; i < len; i++) {
            if (cbuf[off + i] == '\n') {
                lineCount++;
            }
        }
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void flush() throws IOException {
        writer.flush();
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void close() throws IOException {
        writer.close();
    }

    /**
     * Gibt die Anzahl der bislang geschriebenen Zeichen zurück.
     * 
     * @return Anzahl der innerhalb des Writers geschriebenen Zeichen.
     */
    public long getCharacterCount() {
        return characterCount;
    }

    /**
     * Gibt die Anzahl der bislang geschriebenen Zeilen zurück. Eine neue Zeile wird immer dann angenommen, wenn das
     * Zeichen '\n' geschrieben wurde.
     * 
     * @return Anzahl der bislang geschribenen Zeilen beginnend bei 1.
     */
    public long getLineCount() {
        return lineCount;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy