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