001/* 002 * $Id: CatReader.java 4065 2012-07-27 15:17:38Z kredel $ 003 */ 004 005package edu.jas.util; 006 007 008import java.io.IOException; 009import java.io.Reader; 010 011 012// import org.apache.log4j.Logger; 013 014 015/** 016 * Reader to conncat two readers. Read from first reader until it is empty, then 017 * read from second reader. 018 * @author Heinz Kredel 019 */ 020 021public class CatReader extends Reader { 022 023 024 // private static final Logger logger = Logger.getLogger(CatReader.class); 025 // private static boolean debug = logger.isDebugEnabled(); 026 027 028 private final Reader first; 029 030 031 private final Reader second; 032 033 034 private boolean doFirst; 035 036 037 /** 038 * Constructor. 039 * @param f first Reader. 040 * @param s second Reader. 041 */ 042 public CatReader(Reader f, Reader s) { 043 first = f; 044 second = s; 045 doFirst = true; 046 } 047 048 049 /** 050 * Read char array. 051 * @param cbuf array. 052 * @param off start offset. 053 * @param len number of chars to read. 054 * @return number of chars read, or -1. 055 */ 056 @Override 057 public int read(char[] cbuf, int off, int len) throws IOException { 058 int i = -1; 059 if (doFirst) { 060 i = first.read(cbuf, off, len); 061 if (i < 0) { 062 doFirst = false; 063 i = second.read(cbuf, off, len); 064 } 065 } else { 066 i = second.read(cbuf, off, len); 067 } 068 //System.out.println("i = " + i); 069 return i; 070 } 071 072 073 /** 074 * Close this Reader. 075 */ 076 @Override 077 public void close() throws IOException { 078 try { 079 first.close(); 080 } finally { 081 second.close(); 082 } 083 } 084 085}