1bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook/* 2bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Licensed to the Apache Software Foundation (ASF) under one or more 3bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * contributor license agreements. See the NOTICE file distributed with 4bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * this work for additional information regarding copyright ownership. 5bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * The ASF licenses this file to You under the Apache License, Version 2.0 6bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * (the "License"); you may not use this file except in compliance with 7bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * the License. You may obtain a copy of the License at 8bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 9bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * http://www.apache.org/licenses/LICENSE-2.0 10bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 11bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Unless required by applicable law or agreed to in writing, software 12bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * distributed under the License is distributed on an "AS IS" BASIS, 13bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * See the License for the specific language governing permissions and 15bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * limitations under the License. 16bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 17bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookpackage org.apache.commons.io; 18bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 19bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.BufferedInputStream; 20bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.BufferedReader; 21bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.ByteArrayInputStream; 22bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.CharArrayWriter; 23bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.File; 24bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.IOException; 25bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.InputStream; 26bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.InputStreamReader; 27bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.OutputStream; 28bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.OutputStreamWriter; 29bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.PrintWriter; 30bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.Reader; 31bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.StringWriter; 32bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.Writer; 33bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.util.ArrayList; 34bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.util.Collection; 35bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.util.Iterator; 36bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.util.List; 37bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 38bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport org.apache.commons.io.output.ByteArrayOutputStream; 39bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 40bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook/** 41bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * General IO stream manipulation utilities. 42bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 43bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This class provides static utility methods for input/output operations. 44bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <ul> 45bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <li>closeQuietly - these methods close a stream ignoring nulls and exceptions 46bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <li>toXxx/read - these methods read data from a stream 47bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <li>write - these methods write data to a stream 48bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <li>copy - these methods copy all the data from one stream to another 49bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <li>contentEquals - these methods compare the content of two streams 50bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * </ul> 51bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 52bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * The byte-to-char methods and char-to-byte methods involve a conversion step. 53bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Two methods are provided in each case, one that uses the platform default 54bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * encoding and the other which allows you to specify an encoding. You are 55bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * encouraged to always specify an encoding because relying on the platform 56bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * default can lead to unexpected results, for example when moving from 57bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * development to production. 58bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 59bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * All the methods in this class that read a stream are buffered internally. 60bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This means that there is no cause to use a <code>BufferedInputStream</code> 61bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * or <code>BufferedReader</code>. The default buffer size of 4K has been shown 62bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * to be efficient in tests. 63bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 64bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Wherever possible, the methods in this class do <em>not</em> flush or close 65bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * the stream. This is to avoid making non-portable assumptions about the 66bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * streams' origin and further use. Thus the caller is still responsible for 67bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * closing streams after use. 68bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 69bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Origin of code: Excalibur. 70bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 71bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @author Peter Donald 72bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @author Jeff Turner 73bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @author Matthew Hawthorne 74bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @author Stephen Colebourne 75bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @author Gareth Davis 76bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @author Ian Springer 77bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @author Niall Pemberton 78bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @author Sandy McArthur 79bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @version $Id: IOUtils.java 481854 2006-12-03 18:30:07Z scolebourne $ 80bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 81bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookpublic class IOUtils { 82bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // NOTE: This class is focussed on InputStream, OutputStream, Reader and 83bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // Writer. Each method should take at least one of these as a parameter, 84bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // or return one of them. 85bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 86bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 87bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * The Unix directory separator character. 88bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 89bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static final char DIR_SEPARATOR_UNIX = '/'; 90bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 91bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * The Windows directory separator character. 92bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 93bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static final char DIR_SEPARATOR_WINDOWS = '\\'; 94bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 95bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * The system directory separator character. 96bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 97bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static final char DIR_SEPARATOR = File.separatorChar; 98bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 99bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * The Unix line separator string. 100bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 101bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static final String LINE_SEPARATOR_UNIX = "\n"; 102bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 103bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * The Windows line separator string. 104bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 105bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static final String LINE_SEPARATOR_WINDOWS = "\r\n"; 106bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 107bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * The system line separator string. 108bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 109bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static final String LINE_SEPARATOR; 110bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook static { 111bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // avoid security issues 112bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook StringWriter buf = new StringWriter(4); 113bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook PrintWriter out = new PrintWriter(buf); 114bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook out.println(); 115bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook LINE_SEPARATOR = buf.toString(); 116bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 117bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 118bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 119bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * The default buffer size to use. 120bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 121bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook private static final int DEFAULT_BUFFER_SIZE = 1024 * 4; 122bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 123bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 124bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Instances should NOT be constructed in standard programming. 125bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 126bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public IOUtils() { 127bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook super(); 128bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 129bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 130bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook //----------------------------------------------------------------------- 131bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 132bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Unconditionally close an <code>Reader</code>. 133bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 134bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Equivalent to {@link Reader#close()}, except any exceptions will be ignored. 135bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This is typically used in finally blocks. 136bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 137bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the Reader to close, may be null or already closed 138bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 139bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void closeQuietly(Reader input) { 140bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook try { 141bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (input != null) { 142bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook input.close(); 143bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 144bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } catch (IOException ioe) { 145bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // ignore 146bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 147bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 148bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 149bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 150bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Unconditionally close a <code>Writer</code>. 151bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 152bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Equivalent to {@link Writer#close()}, except any exceptions will be ignored. 153bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This is typically used in finally blocks. 154bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 155bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the Writer to close, may be null or already closed 156bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 157bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void closeQuietly(Writer output) { 158bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook try { 159bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (output != null) { 160bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.close(); 161bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 162bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } catch (IOException ioe) { 163bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // ignore 164bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 165bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 166bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 167bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 168bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Unconditionally close an <code>InputStream</code>. 169bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 170bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Equivalent to {@link InputStream#close()}, except any exceptions will be ignored. 171bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This is typically used in finally blocks. 172bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 173bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the InputStream to close, may be null or already closed 174bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 175bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void closeQuietly(InputStream input) { 176bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook try { 177bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (input != null) { 178bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook input.close(); 179bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 180bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } catch (IOException ioe) { 181bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // ignore 182bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 183bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 184bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 185bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 186bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Unconditionally close an <code>OutputStream</code>. 187bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 188bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Equivalent to {@link OutputStream#close()}, except any exceptions will be ignored. 189bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This is typically used in finally blocks. 190bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 191bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the OutputStream to close, may be null or already closed 192bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 193bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void closeQuietly(OutputStream output) { 194bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook try { 195bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (output != null) { 196bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.close(); 197bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 198bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } catch (IOException ioe) { 199bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // ignore 200bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 201bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 202bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 203bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // read toByteArray 204bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook //----------------------------------------------------------------------- 205bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 206bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Get the contents of an <code>InputStream</code> as a <code>byte[]</code>. 207bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 208bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 209bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedInputStream</code>. 210bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 211bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>InputStream</code> to read from 212bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the requested byte array 213bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input is null 214bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 215bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 216bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static byte[] toByteArray(InputStream input) throws IOException { 217bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook ByteArrayOutputStream output = new ByteArrayOutputStream(); 218bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook copy(input, output); 219bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return output.toByteArray(); 220bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 221bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 222bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 223bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Get the contents of a <code>Reader</code> as a <code>byte[]</code> 224bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * using the default character encoding of the platform. 225bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 226bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 227bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedReader</code>. 228bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 229bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>Reader</code> to read from 230bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the requested byte array 231bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input is null 232bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 233bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 234bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static byte[] toByteArray(Reader input) throws IOException { 235bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook ByteArrayOutputStream output = new ByteArrayOutputStream(); 236bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook copy(input, output); 237bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return output.toByteArray(); 238bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 239bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 240bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 241bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Get the contents of a <code>Reader</code> as a <code>byte[]</code> 242bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * using the specified character encoding. 243bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 244bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Character encoding names can be found at 245bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. 246bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 247bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 248bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedReader</code>. 249bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 250bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>Reader</code> to read from 251bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param encoding the encoding to use, null means platform default 252bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the requested byte array 253bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input is null 254bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 255bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 256bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 257bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static byte[] toByteArray(Reader input, String encoding) 258bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 259bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook ByteArrayOutputStream output = new ByteArrayOutputStream(); 260bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook copy(input, output, encoding); 261bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return output.toByteArray(); 262bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 263bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 264bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 265bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Get the contents of a <code>String</code> as a <code>byte[]</code> 266bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * using the default character encoding of the platform. 267bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 268bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This is the same as {@link String#getBytes()}. 269bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 270bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>String</code> to convert 271bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the requested byte array 272bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input is null 273bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs (never occurs) 274bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @deprecated Use {@link String#getBytes()} 275bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 276bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static byte[] toByteArray(String input) throws IOException { 277bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return input.getBytes(); 278bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 279bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 280bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // read char[] 281bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook //----------------------------------------------------------------------- 282bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 283bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Get the contents of an <code>InputStream</code> as a character array 284bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * using the default character encoding of the platform. 285bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 286bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 287bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedInputStream</code>. 288bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 289bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param is the <code>InputStream</code> to read from 290bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the requested character array 291bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input is null 292bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 293bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 294bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 295bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static char[] toCharArray(InputStream is) throws IOException { 296bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook CharArrayWriter output = new CharArrayWriter(); 297bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook copy(is, output); 298bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return output.toCharArray(); 299bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 300bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 301bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 302bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Get the contents of an <code>InputStream</code> as a character array 303bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * using the specified character encoding. 304bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 305bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Character encoding names can be found at 306bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. 307bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 308bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 309bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedInputStream</code>. 310bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 311bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param is the <code>InputStream</code> to read from 312bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param encoding the encoding to use, null means platform default 313bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the requested character array 314bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input is null 315bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 316bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 317bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 318bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static char[] toCharArray(InputStream is, String encoding) 319bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 320bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook CharArrayWriter output = new CharArrayWriter(); 321bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook copy(is, output, encoding); 322bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return output.toCharArray(); 323bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 324bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 325bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 326bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Get the contents of a <code>Reader</code> as a character array. 327bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 328bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 329bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedReader</code>. 330bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 331bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>Reader</code> to read from 332bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the requested character array 333bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input is null 334bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 335bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 336bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 337bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static char[] toCharArray(Reader input) throws IOException { 338bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook CharArrayWriter sw = new CharArrayWriter(); 339bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook copy(input, sw); 340bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return sw.toCharArray(); 341bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 342bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 343bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // read toString 344bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook //----------------------------------------------------------------------- 345bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 346bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Get the contents of an <code>InputStream</code> as a String 347bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * using the default character encoding of the platform. 348bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 349bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 350bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedInputStream</code>. 351bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 352bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>InputStream</code> to read from 353bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the requested String 354bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input is null 355bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 356bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 357bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static String toString(InputStream input) throws IOException { 358bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook StringWriter sw = new StringWriter(); 359bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook copy(input, sw); 360bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return sw.toString(); 361bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 362bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 363bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 364bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Get the contents of an <code>InputStream</code> as a String 365bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * using the specified character encoding. 366bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 367bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Character encoding names can be found at 368bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. 369bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 370bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 371bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedInputStream</code>. 372bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 373bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>InputStream</code> to read from 374bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param encoding the encoding to use, null means platform default 375bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the requested String 376bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input is null 377bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 378bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 379bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static String toString(InputStream input, String encoding) 380bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 381bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook StringWriter sw = new StringWriter(); 382bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook copy(input, sw, encoding); 383bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return sw.toString(); 384bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 385bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 386bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 387bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Get the contents of a <code>Reader</code> as a String. 388bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 389bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 390bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedReader</code>. 391bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 392bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>Reader</code> to read from 393bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the requested String 394bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input is null 395bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 396bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 397bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static String toString(Reader input) throws IOException { 398bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook StringWriter sw = new StringWriter(); 399bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook copy(input, sw); 400bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return sw.toString(); 401bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 402bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 403bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 404bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Get the contents of a <code>byte[]</code> as a String 405bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * using the default character encoding of the platform. 406bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 407bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the byte array to read from 408bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the requested String 409bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input is null 410bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs (never occurs) 411bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @deprecated Use {@link String#String(byte[])} 412bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 413bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static String toString(byte[] input) throws IOException { 414bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return new String(input); 415bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 416bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 417bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 418bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Get the contents of a <code>byte[]</code> as a String 419bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * using the specified character encoding. 420bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 421bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Character encoding names can be found at 422bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. 423bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 424bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the byte array to read from 425bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param encoding the encoding to use, null means platform default 426bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the requested String 427bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input is null 428bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs (never occurs) 429bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @deprecated Use {@link String#String(byte[],String)} 430bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 431bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static String toString(byte[] input, String encoding) 432bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 433bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (encoding == null) { 434bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return new String(input); 435bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } else { 436bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return new String(input, encoding); 437bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 438bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 439bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 440bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // readLines 441bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook //----------------------------------------------------------------------- 442bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 443bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Get the contents of an <code>InputStream</code> as a list of Strings, 444bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * one entry per line, using the default character encoding of the platform. 445bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 446bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 447bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedInputStream</code>. 448bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 449bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>InputStream</code> to read from, not null 450bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the list of Strings, never null 451bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input is null 452bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 453bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 454bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 455bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static List<String> readLines(InputStream input) throws IOException { 456bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook InputStreamReader reader = new InputStreamReader(input); 457bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return readLines(reader); 458bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 459bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 460bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 461bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Get the contents of an <code>InputStream</code> as a list of Strings, 462bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * one entry per line, using the specified character encoding. 463bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 464bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Character encoding names can be found at 465bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. 466bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 467bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 468bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedInputStream</code>. 469bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 470bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>InputStream</code> to read from, not null 471bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param encoding the encoding to use, null means platform default 472bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the list of Strings, never null 473bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input is null 474bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 475bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 476bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 477bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static List<String> readLines(InputStream input, String encoding) throws IOException { 478bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (encoding == null) { 479bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return readLines(input); 480bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } else { 481bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook InputStreamReader reader = new InputStreamReader(input, encoding); 482bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return readLines(reader); 483bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 484bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 485bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 486bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 487bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Get the contents of a <code>Reader</code> as a list of Strings, 488bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * one entry per line. 489bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 490bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 491bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedReader</code>. 492bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 493bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>Reader</code> to read from, not null 494bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the list of Strings, never null 495bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input is null 496bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 497bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 498bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 499bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static List<String> readLines(Reader input) throws IOException { 500bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook BufferedReader reader = new BufferedReader(input); 501bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook List<String> list = new ArrayList<String>(); 502bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook String line = reader.readLine(); 503bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook while (line != null) { 504bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook list.add(line); 505bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook line = reader.readLine(); 506bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 507bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return list; 508bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 509bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 510bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // lineIterator 511bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook //----------------------------------------------------------------------- 512bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 513bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Return an Iterator for the lines in a <code>Reader</code>. 514bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 515bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>LineIterator</code> holds a reference to the open 516bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>Reader</code> specified here. When you have finished with the 517bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * iterator you should close the reader to free internal resources. 518bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This can be done by closing the reader directly, or by calling 519bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * {@link LineIterator#close()} or {@link LineIterator#closeQuietly(LineIterator)}. 520bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 521bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * The recommended usage pattern is: 522bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <pre> 523bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * try { 524bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * LineIterator it = IOUtils.lineIterator(reader); 525bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * while (it.hasNext()) { 526bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * String line = it.nextLine(); 527bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * /// do something with line 528bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * } 529bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * } finally { 530bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * IOUtils.closeQuietly(reader); 531bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * } 532bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * </pre> 533bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 534bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param reader the <code>Reader</code> to read from, not null 535bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return an Iterator of the lines in the reader, never null 536bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IllegalArgumentException if the reader is null 537bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.2 538bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 539bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static LineIterator lineIterator(Reader reader) { 540bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return new LineIterator(reader); 541bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 542bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 543bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 544bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Return an Iterator for the lines in an <code>InputStream</code>, using 545bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * the character encoding specified (or default encoding if null). 546bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 547bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>LineIterator</code> holds a reference to the open 548bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>InputStream</code> specified here. When you have finished with 549bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * the iterator you should close the stream to free internal resources. 550bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This can be done by closing the stream directly, or by calling 551bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * {@link LineIterator#close()} or {@link LineIterator#closeQuietly(LineIterator)}. 552bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 553bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * The recommended usage pattern is: 554bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <pre> 555bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * try { 556bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * LineIterator it = IOUtils.lineIterator(stream, "UTF-8"); 557bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * while (it.hasNext()) { 558bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * String line = it.nextLine(); 559bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * /// do something with line 560bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * } 561bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * } finally { 562bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * IOUtils.closeQuietly(stream); 563bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * } 564bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * </pre> 565bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 566bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>InputStream</code> to read from, not null 567bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param encoding the encoding to use, null means platform default 568bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return an Iterator of the lines in the reader, never null 569bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IllegalArgumentException if the input is null 570bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs, such as if the encoding is invalid 571bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.2 572bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 573bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static LineIterator lineIterator(InputStream input, String encoding) 574bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 575bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook Reader reader = null; 576bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (encoding == null) { 577bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook reader = new InputStreamReader(input); 578bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } else { 579bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook reader = new InputStreamReader(input, encoding); 580bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 581bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return new LineIterator(reader); 582bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 583bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 584bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook //----------------------------------------------------------------------- 585bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 586bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Convert the specified string to an input stream, encoded as bytes 587bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * using the default character encoding of the platform. 588bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 589bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the string to convert 590bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return an input stream 591bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 592bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 593bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static InputStream toInputStream(String input) { 594bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook byte[] bytes = input.getBytes(); 595bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return new ByteArrayInputStream(bytes); 596bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 597bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 598bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 599bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Convert the specified string to an input stream, encoded as bytes 600bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * using the specified character encoding. 601bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 602bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Character encoding names can be found at 603bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. 604bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 605bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the string to convert 606bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param encoding the encoding to use, null means platform default 607bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if the encoding is invalid 608bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return an input stream 609bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 610bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 611bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static InputStream toInputStream(String input, String encoding) throws IOException { 612bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook byte[] bytes = encoding != null ? input.getBytes(encoding) : input.getBytes(); 613bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return new ByteArrayInputStream(bytes); 614bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 615bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 616bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // write byte[] 617bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook //----------------------------------------------------------------------- 618bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 619bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Writes bytes from a <code>byte[]</code> to an <code>OutputStream</code>. 620bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 621bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param data the byte array to write, do not modify during output, 622bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * null ignored 623bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>OutputStream</code> to write to 624bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if output is null 625bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 626bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 627bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 628bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void write(byte[] data, OutputStream output) 629bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 630bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (data != null) { 631bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(data); 632bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 633bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 634bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 635bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 636bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Writes bytes from a <code>byte[]</code> to chars on a <code>Writer</code> 637bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * using the default character encoding of the platform. 638bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 639bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method uses {@link String#String(byte[])}. 640bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 641bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param data the byte array to write, do not modify during output, 642bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * null ignored 643bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>Writer</code> to write to 644bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if output is null 645bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 646bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 647bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 648bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void write(byte[] data, Writer output) throws IOException { 649bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (data != null) { 650bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(new String(data)); 651bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 652bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 653bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 654bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 655bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Writes bytes from a <code>byte[]</code> to chars on a <code>Writer</code> 656bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * using the specified character encoding. 657bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 658bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Character encoding names can be found at 659bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. 660bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 661bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method uses {@link String#String(byte[], String)}. 662bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 663bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param data the byte array to write, do not modify during output, 664bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * null ignored 665bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>Writer</code> to write to 666bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param encoding the encoding to use, null means platform default 667bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if output is null 668bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 669bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 670bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 671bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void write(byte[] data, Writer output, String encoding) 672bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 673bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (data != null) { 674bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (encoding == null) { 675bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook write(data, output); 676bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } else { 677bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(new String(data, encoding)); 678bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 679bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 680bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 681bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 682bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // write char[] 683bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook //----------------------------------------------------------------------- 684bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 685bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Writes chars from a <code>char[]</code> to a <code>Writer</code> 686bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * using the default character encoding of the platform. 687bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 688bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param data the char array to write, do not modify during output, 689bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * null ignored 690bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>Writer</code> to write to 691bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if output is null 692bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 693bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 694bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 695bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void write(char[] data, Writer output) throws IOException { 696bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (data != null) { 697bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(data); 698bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 699bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 700bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 701bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 702bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Writes chars from a <code>char[]</code> to bytes on an 703bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>OutputStream</code>. 704bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 705bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method uses {@link String#String(char[])} and 706bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * {@link String#getBytes()}. 707bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 708bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param data the char array to write, do not modify during output, 709bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * null ignored 710bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>OutputStream</code> to write to 711bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if output is null 712bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 713bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 714bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 715bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void write(char[] data, OutputStream output) 716bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 717bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (data != null) { 718bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(new String(data).getBytes()); 719bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 720bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 721bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 722bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 723bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Writes chars from a <code>char[]</code> to bytes on an 724bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>OutputStream</code> using the specified character encoding. 725bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 726bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Character encoding names can be found at 727bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. 728bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 729bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method uses {@link String#String(char[])} and 730bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * {@link String#getBytes(String)}. 731bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 732bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param data the char array to write, do not modify during output, 733bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * null ignored 734bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>OutputStream</code> to write to 735bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param encoding the encoding to use, null means platform default 736bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if output is null 737bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 738bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 739bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 740bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void write(char[] data, OutputStream output, String encoding) 741bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 742bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (data != null) { 743bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (encoding == null) { 744bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook write(data, output); 745bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } else { 746bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(new String(data).getBytes(encoding)); 747bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 748bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 749bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 750bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 751bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // write String 752bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook //----------------------------------------------------------------------- 753bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 754bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Writes chars from a <code>String</code> to a <code>Writer</code>. 755bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 756bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param data the <code>String</code> to write, null ignored 757bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>Writer</code> to write to 758bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if output is null 759bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 760bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 761bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 762bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void write(String data, Writer output) throws IOException { 763bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (data != null) { 764bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(data); 765bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 766bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 767bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 768bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 769bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Writes chars from a <code>String</code> to bytes on an 770bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>OutputStream</code> using the default character encoding of the 771bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * platform. 772bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 773bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method uses {@link String#getBytes()}. 774bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 775bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param data the <code>String</code> to write, null ignored 776bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>OutputStream</code> to write to 777bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if output is null 778bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 779bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 780bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 781bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void write(String data, OutputStream output) 782bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 783bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (data != null) { 784bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(data.getBytes()); 785bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 786bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 787bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 788bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 789bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Writes chars from a <code>String</code> to bytes on an 790bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>OutputStream</code> using the specified character encoding. 791bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 792bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Character encoding names can be found at 793bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. 794bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 795bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method uses {@link String#getBytes(String)}. 796bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 797bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param data the <code>String</code> to write, null ignored 798bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>OutputStream</code> to write to 799bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param encoding the encoding to use, null means platform default 800bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if output is null 801bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 802bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 803bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 804bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void write(String data, OutputStream output, String encoding) 805bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 806bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (data != null) { 807bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (encoding == null) { 808bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook write(data, output); 809bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } else { 810bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(data.getBytes(encoding)); 811bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 812bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 813bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 814bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 815bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // write StringBuffer 816bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook //----------------------------------------------------------------------- 817bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 818bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Writes chars from a <code>StringBuffer</code> to a <code>Writer</code>. 819bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 820bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param data the <code>StringBuffer</code> to write, null ignored 821bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>Writer</code> to write to 822bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if output is null 823bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 824bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 825bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 826bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void write(StringBuffer data, Writer output) 827bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 828bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (data != null) { 829bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(data.toString()); 830bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 831bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 832bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 833bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 834bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Writes chars from a <code>StringBuffer</code> to bytes on an 835bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>OutputStream</code> using the default character encoding of the 836bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * platform. 837bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 838bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method uses {@link String#getBytes()}. 839bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 840bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param data the <code>StringBuffer</code> to write, null ignored 841bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>OutputStream</code> to write to 842bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if output is null 843bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 844bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 845bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 846bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void write(StringBuffer data, OutputStream output) 847bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 848bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (data != null) { 849bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(data.toString().getBytes()); 850bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 851bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 852bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 853bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 854bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Writes chars from a <code>StringBuffer</code> to bytes on an 855bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>OutputStream</code> using the specified character encoding. 856bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 857bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Character encoding names can be found at 858bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. 859bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 860bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method uses {@link String#getBytes(String)}. 861bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 862bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param data the <code>StringBuffer</code> to write, null ignored 863bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>OutputStream</code> to write to 864bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param encoding the encoding to use, null means platform default 865bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if output is null 866bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 867bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 868bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 869bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void write(StringBuffer data, OutputStream output, 870bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook String encoding) throws IOException { 871bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (data != null) { 872bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (encoding == null) { 873bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook write(data, output); 874bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } else { 875bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(data.toString().getBytes(encoding)); 876bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 877bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 878bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 879bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 880bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // writeLines 881bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook //----------------------------------------------------------------------- 882bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 883bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Writes the <code>toString()</code> value of each item in a collection to 884bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * an <code>OutputStream</code> line by line, using the default character 885bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * encoding of the platform and the specified line ending. 886bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 887bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param lines the lines to write, null entries produce blank lines 888bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param lineEnding the line separator to use, null is system default 889bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>OutputStream</code> to write to, not null, not closed 890bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the output is null 891bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 892bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 893bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 894bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void writeLines(Collection<Object> lines, String lineEnding, 895bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook OutputStream output) throws IOException { 896bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (lines == null) { 897bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return; 898bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 899bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (lineEnding == null) { 900bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook lineEnding = LINE_SEPARATOR; 901bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 902bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook for (Iterator<Object> it = lines.iterator(); it.hasNext(); ) { 903bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook Object line = it.next(); 904bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (line != null) { 905bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(line.toString().getBytes()); 906bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 907bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(lineEnding.getBytes()); 908bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 909bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 910bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 911bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 912bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Writes the <code>toString()</code> value of each item in a collection to 913bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * an <code>OutputStream</code> line by line, using the specified character 914bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * encoding and the specified line ending. 915bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 916bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Character encoding names can be found at 917bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. 918bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 919bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param lines the lines to write, null entries produce blank lines 920bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param lineEnding the line separator to use, null is system default 921bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>OutputStream</code> to write to, not null, not closed 922bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param encoding the encoding to use, null means platform default 923bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the output is null 924bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 925bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 926bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 927bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void writeLines(Collection<Object> lines, String lineEnding, 928bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook OutputStream output, String encoding) throws IOException { 929bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (encoding == null) { 930bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook writeLines(lines, lineEnding, output); 931bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } else { 932bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (lines == null) { 933bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return; 934bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 935bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (lineEnding == null) { 936bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook lineEnding = LINE_SEPARATOR; 937bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 938bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook for (Iterator<Object> it = lines.iterator(); it.hasNext(); ) { 939bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook Object line = it.next(); 940bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (line != null) { 941bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(line.toString().getBytes(encoding)); 942bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 943bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(lineEnding.getBytes(encoding)); 944bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 945bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 946bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 947bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 948bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 949bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Writes the <code>toString()</code> value of each item in a collection to 950bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * a <code>Writer</code> line by line, using the specified line ending. 951bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 952bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param lines the lines to write, null entries produce blank lines 953bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param lineEnding the line separator to use, null is system default 954bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param writer the <code>Writer</code> to write to, not null, not closed 955bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input is null 956bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 957bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 958bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 959bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void writeLines(Collection<Object> lines, String lineEnding, 960bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook Writer writer) throws IOException { 961bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (lines == null) { 962bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return; 963bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 964bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (lineEnding == null) { 965bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook lineEnding = LINE_SEPARATOR; 966bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 967bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook for (Iterator<Object> it = lines.iterator(); it.hasNext(); ) { 968bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook Object line = it.next(); 969bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (line != null) { 970bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook writer.write(line.toString()); 971bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 972bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook writer.write(lineEnding); 973bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 974bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 975bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 976bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // copy from InputStream 977bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook //----------------------------------------------------------------------- 978bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 979bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Copy bytes from an <code>InputStream</code> to an 980bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>OutputStream</code>. 981bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 982bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 983bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedInputStream</code>. 984bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 985bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Large streams (over 2GB) will return a bytes copied value of 986bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>-1</code> after the copy has completed since the correct 987bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * number of bytes cannot be returned as an int. For large streams 988bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * use the <code>copyLarge(InputStream, OutputStream)</code> method. 989bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 990bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>InputStream</code> to read from 991bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>OutputStream</code> to write to 992bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the number of bytes copied 993bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input or output is null 994bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 995bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws ArithmeticException if the byte count is too large 996bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 997bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 998bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static int copy(InputStream input, OutputStream output) throws IOException { 999bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook long count = copyLarge(input, output); 1000bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (count > Integer.MAX_VALUE) { 1001bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return -1; 1002bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1003bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return (int) count; 1004bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1005bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 1006bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 1007bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Copy bytes from a large (over 2GB) <code>InputStream</code> to an 1008bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>OutputStream</code>. 1009bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1010bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 1011bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedInputStream</code>. 1012bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 1013bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>InputStream</code> to read from 1014bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>OutputStream</code> to write to 1015bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the number of bytes copied 1016bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input or output is null 1017bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 1018bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.3 1019bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 1020bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static long copyLarge(InputStream input, OutputStream output) 1021bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 1022bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; 1023bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook long count = 0; 1024bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook int n = 0; 1025bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook while (-1 != (n = input.read(buffer))) { 1026bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(buffer, 0, n); 1027bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook count += n; 1028bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1029bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return count; 1030bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1031bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 1032bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 1033bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Copy bytes from an <code>InputStream</code> to chars on a 1034bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>Writer</code> using the default character encoding of the platform. 1035bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1036bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 1037bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedInputStream</code>. 1038bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1039bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method uses {@link InputStreamReader}. 1040bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 1041bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>InputStream</code> to read from 1042bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>Writer</code> to write to 1043bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input or output is null 1044bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 1045bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 1046bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 1047bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void copy(InputStream input, Writer output) 1048bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 1049bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook InputStreamReader in = new InputStreamReader(input); 1050bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook copy(in, output); 1051bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1052bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 1053bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 1054bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Copy bytes from an <code>InputStream</code> to chars on a 1055bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>Writer</code> using the specified character encoding. 1056bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1057bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 1058bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedInputStream</code>. 1059bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1060bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Character encoding names can be found at 1061bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. 1062bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1063bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method uses {@link InputStreamReader}. 1064bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 1065bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>InputStream</code> to read from 1066bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>Writer</code> to write to 1067bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param encoding the encoding to use, null means platform default 1068bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input or output is null 1069bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 1070bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 1071bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 1072bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void copy(InputStream input, Writer output, String encoding) 1073bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 1074bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (encoding == null) { 1075bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook copy(input, output); 1076bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } else { 1077bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook InputStreamReader in = new InputStreamReader(input, encoding); 1078bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook copy(in, output); 1079bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1080bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1081bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 1082bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // copy from Reader 1083bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook //----------------------------------------------------------------------- 1084bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 1085bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Copy chars from a <code>Reader</code> to a <code>Writer</code>. 1086bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1087bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 1088bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedReader</code>. 1089bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1090bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Large streams (over 2GB) will return a chars copied value of 1091bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>-1</code> after the copy has completed since the correct 1092bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * number of chars cannot be returned as an int. For large streams 1093bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * use the <code>copyLarge(Reader, Writer)</code> method. 1094bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 1095bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>Reader</code> to read from 1096bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>Writer</code> to write to 1097bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the number of characters copied 1098bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input or output is null 1099bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 1100bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws ArithmeticException if the character count is too large 1101bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 1102bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 1103bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static int copy(Reader input, Writer output) throws IOException { 1104bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook long count = copyLarge(input, output); 1105bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (count > Integer.MAX_VALUE) { 1106bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return -1; 1107bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1108bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return (int) count; 1109bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1110bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 1111bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 1112bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Copy chars from a large (over 2GB) <code>Reader</code> to a <code>Writer</code>. 1113bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1114bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 1115bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedReader</code>. 1116bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 1117bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>Reader</code> to read from 1118bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>Writer</code> to write to 1119bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return the number of characters copied 1120bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input or output is null 1121bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 1122bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.3 1123bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 1124bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static long copyLarge(Reader input, Writer output) throws IOException { 1125bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook char[] buffer = new char[DEFAULT_BUFFER_SIZE]; 1126bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook long count = 0; 1127bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook int n = 0; 1128bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook while (-1 != (n = input.read(buffer))) { 1129bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook output.write(buffer, 0, n); 1130bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook count += n; 1131bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1132bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return count; 1133bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1134bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 1135bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 1136bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Copy chars from a <code>Reader</code> to bytes on an 1137bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>OutputStream</code> using the default character encoding of the 1138bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * platform, and calling flush. 1139bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1140bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 1141bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedReader</code>. 1142bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1143bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Due to the implementation of OutputStreamWriter, this method performs a 1144bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * flush. 1145bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1146bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method uses {@link OutputStreamWriter}. 1147bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 1148bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>Reader</code> to read from 1149bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>OutputStream</code> to write to 1150bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input or output is null 1151bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 1152bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 1153bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 1154bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void copy(Reader input, OutputStream output) 1155bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 1156bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook OutputStreamWriter out = new OutputStreamWriter(output); 1157bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook copy(input, out); 1158bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // XXX Unless anyone is planning on rewriting OutputStreamWriter, we 1159bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // have to flush here. 1160bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook out.flush(); 1161bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1162bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 1163bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 1164bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Copy chars from a <code>Reader</code> to bytes on an 1165bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>OutputStream</code> using the specified character encoding, and 1166bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * calling flush. 1167bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1168bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally, so there is no need to use a 1169bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedReader</code>. 1170bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1171bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Character encoding names can be found at 1172bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. 1173bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1174bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Due to the implementation of OutputStreamWriter, this method performs a 1175bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * flush. 1176bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1177bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method uses {@link OutputStreamWriter}. 1178bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 1179bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input the <code>Reader</code> to read from 1180bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param output the <code>OutputStream</code> to write to 1181bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param encoding the encoding to use, null means platform default 1182bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if the input or output is null 1183bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 1184bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 1185bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 1186bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void copy(Reader input, OutputStream output, String encoding) 1187bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 1188bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (encoding == null) { 1189bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook copy(input, output); 1190bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } else { 1191bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook OutputStreamWriter out = new OutputStreamWriter(output, encoding); 1192bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook copy(input, out); 1193bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // XXX Unless anyone is planning on rewriting OutputStreamWriter, 1194bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // we have to flush here. 1195bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook out.flush(); 1196bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1197bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1198bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 1199bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // content equals 1200bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook //----------------------------------------------------------------------- 1201bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 1202bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Compare the contents of two Streams to determine if they are equal or 1203bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * not. 1204bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1205bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally using 1206bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedInputStream</code> if they are not already buffered. 1207bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 1208bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input1 the first stream 1209bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input2 the second stream 1210bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return true if the content of the streams are equal or they both don't 1211bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * exist, false otherwise 1212bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if either input is null 1213bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 1214bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 1215bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static boolean contentEquals(InputStream input1, InputStream input2) 1216bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 1217bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (!(input1 instanceof BufferedInputStream)) { 1218bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook input1 = new BufferedInputStream(input1); 1219bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1220bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (!(input2 instanceof BufferedInputStream)) { 1221bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook input2 = new BufferedInputStream(input2); 1222bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1223bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 1224bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook int ch = input1.read(); 1225bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook while (-1 != ch) { 1226bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook int ch2 = input2.read(); 1227bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (ch != ch2) { 1228bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return false; 1229bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1230bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook ch = input1.read(); 1231bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1232bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 1233bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook int ch2 = input2.read(); 1234bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return (ch2 == -1); 1235bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1236bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 1237bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 1238bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Compare the contents of two Readers to determine if they are equal or 1239bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * not. 1240bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p> 1241bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This method buffers the input internally using 1242bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <code>BufferedReader</code> if they are not already buffered. 1243bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 1244bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input1 the first reader 1245bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param input2 the second reader 1246bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @return true if the content of the readers are equal or they both don't 1247bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * exist, false otherwise 1248bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws NullPointerException if either input is null 1249bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @throws IOException if an I/O error occurs 1250bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.1 1251bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 1252bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static boolean contentEquals(Reader input1, Reader input2) 1253bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws IOException { 1254bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (!(input1 instanceof BufferedReader)) { 1255bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook input1 = new BufferedReader(input1); 1256bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1257bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (!(input2 instanceof BufferedReader)) { 1258bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook input2 = new BufferedReader(input2); 1259bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1260bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 1261bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook int ch = input1.read(); 1262bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook while (-1 != ch) { 1263bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook int ch2 = input2.read(); 1264bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (ch != ch2) { 1265bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return false; 1266bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1267bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook ch = input1.read(); 1268bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1269bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 1270bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook int ch2 = input2.read(); 1271bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return (ch2 == -1); 1272bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 1273bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 1274bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook} 1275