Wraps a stream, printing to standard out everything that is read from it.
/*
* LoggingWriter.java Created Sep 7, 2010 by Andrew Butler, PSL
*/
//package prisms.util;
import java.io.IOException;
import java.nio.CharBuffer;
/** Wraps a stream, printing to standard out everything that is read from it. */
public class LoggingReader extends java.io.Reader {
private java.io.Reader theBase;
private java.io.Writer theLog;
/**
* @param base
* The reader to wrap
* @param file
* The name of the file to log to, or null to log to System.out
* @throws IOException
* If an error occurs setting up the log file
*/
public LoggingReader(java.io.Reader base, String file) throws IOException {
theBase = base;
if (file != null)
theLog = new java.io.BufferedWriter(new java.io.FileWriter(file));
}
/**
* @return The reader wrapped by this logging reader
*/
public java.io.Reader getBase() {
return theBase;
}
@Override
public int read(CharBuffer target) throws IOException {
int read = theBase.read(target);
if (theLog != null)
theLog.write(target.array(), 0, read);
else
System.out.print(target.toString().substring(0, read));
return read;
}
@Override
public int read() throws IOException {
int read = theBase.read();
if (read >= 0) {
if (theLog != null)
theLog.write(read);
else
System.out.print((char) read);
}
return read;
}
@Override
public int read(char[] cbuf) throws IOException {
int read = theBase.read(cbuf);
if (theLog != null)
theLog.write(cbuf, 0, read);
else
System.out.print(new String(cbuf, 0, read));
return read;
}
@Override
public int read(char[] cbuf, int off, int len) throws IOException {
int read = theBase.read(cbuf, off, len);
if (theLog != null)
theLog.write(cbuf, off, read);
else
System.out.print(new String(cbuf, off, read));
return read;
}
@Override
public long skip(long n) throws IOException {
return super.skip(n);
}
@Override
public boolean ready() throws IOException {
return theBase.ready();
}
@Override
public boolean markSupported() {
return false;
}
@Override
public void close() throws java.io.IOException {
if (theLog != null)
theLog.close();
else
System.out.flush();
theBase.close();
}
}
Related examples in the same category