Along similar lines to what cdc is doing - you can extend PrintWriter and then create and pass around an instance of this new class.
Call getArchive() to get a copy of the data that's passed through the writer.
public class ArchiveWriter extends PrintWriter {
    private StringBuilder data = new StringBuilder();
    public ArchiveWriter(Writer out) {
        super(out);
    }
    public ArchiveWriter(Writer out, boolean autoFlush) {
        super(out, autoFlush);
    }
    public ArchiveWriter(OutputStream out) {
        super(out);
    }
    public ArchiveWriter(OutputStream out, boolean autoFlush) {
        super(out, autoFlush);
    }
    public ArchiveWriter(String fileName) throws FileNotFoundException {
        super(fileName);
    }
    public ArchiveWriter(String fileName, String csn) throws FileNotFoundException, UnsupportedEncodingException {
        super(fileName, csn);
    }
    public ArchiveWriter(File file) throws FileNotFoundException {
        super(file);
    }
    public ArchiveWriter(File file, String csn) throws FileNotFoundException, UnsupportedEncodingException {
        super(file, csn);
    }
    @Override
    public void write(char[] cbuf, int off, int len) {
        super.write(cbuf, off,len);
        data.append(cbuf, off, len);
    }
    @Override
    public void write(String s, int off, int len) {
        super.write(s, off,len);
        data.append(s, off, len);
    }
    public String getArchive() {
        return data.toString();
    }
}