2013-03-09 19 views
0

是否有一個閱讀器類(JDK或庫),我可以用來裝飾另一個閱讀器,使新閱讀器返回"PREFIX" + everythong of innerReader + "POSTFIX"Java閱讀器預先和發佈數據

我想在將讀取器返回給調用者之前用頁眉和頁腳修飾文件內容。

回答

0

我已經建立了這個代表GreyBeardedGeek的帖子,也許有人可以用它:

/** 
* Utility <code>Reader</code> implementation which joins one or more other <code>Reader</code> to appear as one. 
*/ 
public class CompositeReader extends Reader { 

/** Logger. */ 
private final static Logger log = LoggerFactory.getLogger(CompositeReader.class); 

/** List of readers (in order). */ 
private final Reader[] readers; 
/** Current index. */ 
private int index; 

/** 
* @param readers ordered list of <code>Reader</code> to read from. 
*/ 
public CompositeReader(final Reader... readers) { 
    checkArgument(readers.length > 0, "Argument readers must not be empty."); 

    this.readers = readers; 
    index = 0; 
} 

@Override 
public int read(final char[] cbuf, final int off, final int len) throws IOException { 
    int read = 0; 
    while (read < len && index != readers.length) { 
     final Reader reader = readers[index]; 
     final int readFromReader = reader.read(cbuf, off + read, len - read); 

     if (readFromReader == -1) { 
      ++index; 
     } else { 
      read += readFromReader; 
     } 
    } 

    if (read == 0) { 
     return -1; 
    } 

    return read; 
} 

@Override 
public void close() throws IOException { 
    IOException firstException = null; 

    for (final Reader reader : readers) { 
     try { 
      reader.close(); 
     } catch (final IOException ex) { 
      if (firstException != null) { 
       log.warn("Multiple readers could not be closed, only first exception will be thrown."); 
       firstException = ex; 
      } 
     } 
    } 

    if (firstException != null) { 
     throw firstException; 
    } 
} 
} 

在這裏你去:-)