Re: Print the output on the screen from a class that uses PrintWriter
as an output stream.
saturnlee@yahoo.com wrote:
I 'm trying to output the result from a class called lexical, and CLASS
lexical uses PrintWriter as an output stream.
I successfully output the result to the file using the following
command
lexical.outStream=new PrintWriter( new
FileOutputStream("testing.txt") );
but, how can i output the result, and print the result on the screen? I
try the following
OutputStream out=new OutputStream();
lexical.outStream = new PrintWriter( new PrintStream(out));
but it doesn't work.
Any suggestion?
Here's an idea - write a Writer subclass that feeds the output to
multiple Writer instances. I've done very little testing. Use at your
own risk:
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
/**
* Write to multiple Writer instances
*
*/
public class MultiWriter extends Writer {
private Writer[] writers;
/**
* New MultiWriter for specified writers. Note that flush is
* only done on explicit call.
*/
public MultiWriter(Writer... writers) {
this.writers = new Writer[writers.length];
for (int i = 0; i < writers.length; i++) {
this.writers[i] = writers[i];
}
}
@Override
public void write(char[] cbuf, int off, int len)
throws IOException {
for (Writer w : writers) {
w.write(cbuf, off, len);
w.flush();
}
}
@Override
public void flush() throws IOException {
for (Writer w : writers) {
w.flush();
}
}
@Override
public void close() throws IOException {
for (Writer w : writers) {
w.close();
}
}
public static void main(String[] args) throws IOException {
Writer console = new OutputStreamWriter(System.out);
Writer file = new FileWriter("Testfile.txt");
Writer dup = new MultiWriter(console, file);
PrintWriter print = new PrintWriter(dup);
print.printf("Hello, world");
print.println();
}
}