001 /* 002 * $Id: CatReader.java 3442 2010-12-25 16:28:07Z kredel $ 003 */ 004 005 package edu.jas.util; 006 007 008 import java.io.Reader; 009 import java.io.IOException; 010 011 //import org.apache.log4j.Logger; 012 013 014 015 /** 016 * Reader to concat two readers. 017 * Read from first reader until it is empty, then read from second reader. 018 * @author Heinz Kredel 019 */ 020 021 public 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 public int read(char[] cbuf, int off, int len) throws IOException { 057 int i = -1; 058 if ( doFirst ) { 059 i = first.read(cbuf,off,len); 060 if ( i < 0 ) { 061 doFirst = false; 062 i = second.read(cbuf,off,len); 063 } 064 } else { 065 i = second.read(cbuf,off,len); 066 } 067 //System.out.println("i = " + i); 068 return i; 069 } 070 071 072 /** 073 * Close this Reader. 074 */ 075 public void close() throws IOException { 076 try { 077 first.close(); 078 } finally { 079 second.close(); 080 } 081 } 082 083 }