Author: ggregory Date: Fri Mar 30 13:12:16 2012 New Revision: 1307397 URL: http://svn.apache.org/viewvc?rev=1307397&view=rev Log: [IO-318] Add Charset sister APIs to method that take a String charset name.
Modified: commons/proper/io/trunk/src/main/java/org/apache/commons/io/IOUtils.java commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsCopyTestCase.java commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsTestCase.java commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsWriteTestCase.java commons/proper/io/trunk/src/test/java/org/apache/commons/io/LineIteratorTestCase.java Modified: commons/proper/io/trunk/src/main/java/org/apache/commons/io/IOUtils.java URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/main/java/org/apache/commons/io/IOUtils.java?rev=1307397&r1=1307396&r2=1307397&view=diff ============================================================================== --- commons/proper/io/trunk/src/main/java/org/apache/commons/io/IOUtils.java (original) +++ commons/proper/io/trunk/src/main/java/org/apache/commons/io/IOUtils.java Fri Mar 30 13:12:16 2012 @@ -36,6 +36,8 @@ import java.net.Socket; import java.net.URI; import java.net.URL; import java.nio.channels.Selector; +import java.nio.charset.Charset; +import java.nio.charset.UnsupportedCharsetException; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -519,8 +521,26 @@ public class IOUtils { * @throws IOException if an I/O error occurs */ public static byte[] toByteArray(Reader input) throws IOException { + return toByteArray(input, Charset.defaultCharset()); + } + + /** + * Get the contents of a <code>Reader</code> as a <code>byte[]</code> + * using the specified character encoding. + * <p> + * This method buffers the input internally, so there is no need to use a + * <code>BufferedReader</code>. + * + * @param input the <code>Reader</code> to read from + * @param encoding the encoding to use, null means platform default + * @return the requested byte array + * @throws NullPointerException if the input is null + * @throws IOException if an I/O error occurs + * @since 2.3 + */ + public static byte[] toByteArray(Reader input, Charset encoding) throws IOException { ByteArrayOutputStream output = new ByteArrayOutputStream(); - copy(input, output); + copy(input, output, encoding); return output.toByteArray(); } @@ -541,11 +561,8 @@ public class IOUtils { * @throws IOException if an I/O error occurs * @since 1.1 */ - public static byte[] toByteArray(Reader input, String encoding) - throws IOException { - ByteArrayOutputStream output = new ByteArrayOutputStream(); - copy(input, output, encoding); - return output.toByteArray(); + public static byte[] toByteArray(Reader input, String encoding) throws IOException { + return toByteArray(input, toCharset(encoding)); } /** @@ -581,8 +598,27 @@ public class IOUtils { * @since 1.1 */ public static char[] toCharArray(InputStream is) throws IOException { + return toCharArray(is, Charset.defaultCharset()); + } + + /** + * Get the contents of an <code>InputStream</code> as a character array + * using the specified character encoding. + * <p> + * This method buffers the input internally, so there is no need to use a + * <code>BufferedInputStream</code>. + * + * @param is the <code>InputStream</code> to read from + * @param encoding the encoding to use, null means platform default + * @return the requested character array + * @throws NullPointerException if the input is null + * @throws IOException if an I/O error occurs + * @since 2.3 + */ + public static char[] toCharArray(InputStream is, Charset encoding) + throws IOException { CharArrayWriter output = new CharArrayWriter(); - copy(is, output); + copy(is, output, encoding); return output.toCharArray(); } @@ -603,11 +639,8 @@ public class IOUtils { * @throws IOException if an I/O error occurs * @since 1.1 */ - public static char[] toCharArray(InputStream is, String encoding) - throws IOException { - CharArrayWriter output = new CharArrayWriter(); - copy(is, output, encoding); - return output.toCharArray(); + public static char[] toCharArray(InputStream is, String encoding) throws IOException { + return toCharArray(is, toCharset(encoding)); } /** @@ -643,7 +676,27 @@ public class IOUtils { * @throws IOException if an I/O error occurs */ public static String toString(InputStream input) throws IOException { - return toString(input, null); + return toString(input, Charset.defaultCharset()); + } + + /** + * Get the contents of an <code>InputStream</code> as a String + * using the specified character encoding. + * <p> + * This method buffers the input internally, so there is no need to use a + * <code>BufferedInputStream</code>. + * </p> + * @param input the <code>InputStream</code> to read from + * @param encoding the encoding to use, null means platform default + * @return the requested String + * @throws NullPointerException if the input is null + * @throws IOException if an I/O error occurs + * @since 2.3 + */ + public static String toString(InputStream input, Charset encoding) throws IOException { + StringBuilderWriter sw = new StringBuilderWriter(); + copy(input, sw, encoding); + return sw.toString(); } /** @@ -664,9 +717,7 @@ public class IOUtils { */ public static String toString(InputStream input, String encoding) throws IOException { - StringBuilderWriter sw = new StringBuilderWriter(); - copy(input, sw, encoding); - return sw.toString(); + return toString(input, toCharset(encoding)); } /** @@ -696,7 +747,22 @@ public class IOUtils { * @since 2.1. */ public static String toString(URI uri) throws IOException { - return toString(uri, null); + return toString(uri, Charset.defaultCharset()); + } + + /** + * Gets the contents at the given URI. + * + * @param uri + * The URI source. + * @param encoding + * The encoding name for the URL contents. + * @return The contents of the URL as a String. + * @throws IOException if an I/O exception occurs. + * @since 2.3. + */ + public static String toString(URI uri, Charset encoding) throws IOException { + return toString(uri.toURL(), toCharset(encoding)); } /** @@ -711,7 +777,7 @@ public class IOUtils { * @since 2.1. */ public static String toString(URI uri, String encoding) throws IOException { - return toString(uri.toURL(), encoding); + return toString(uri, toCharset(encoding)); } /** @@ -724,7 +790,7 @@ public class IOUtils { * @since 2.1. */ public static String toString(URL url) throws IOException { - return toString(url, null); + return toString(url, Charset.defaultCharset()); } /** @@ -736,9 +802,9 @@ public class IOUtils { * The encoding name for the URL contents. * @return The contents of the URL as a String. * @throws IOException if an I/O exception occurs. - * @since 2.1. + * @since 2.3 */ - public static String toString(URL url, String encoding) throws IOException { + public static String toString(URL url, Charset encoding) throws IOException { InputStream inputStream = url.openStream(); try { return toString(inputStream, encoding); @@ -748,6 +814,21 @@ public class IOUtils { } /** + * Gets the contents at the given URL. + * + * @param url + * The URL source. + * @param encoding + * The encoding name for the URL contents. + * @return The contents of the URL as a String. + * @throws IOException if an I/O exception occurs. + * @since 2.1. + */ + public static String toString(URL url, String encoding) throws IOException { + return toString(url, toCharset(encoding)); + } + + /** * Get the contents of a <code>byte[]</code> as a String * using the default character encoding of the platform. * @@ -774,16 +855,9 @@ public class IOUtils { * @return the requested String * @throws NullPointerException if the input is null * @throws IOException if an I/O error occurs (never occurs) - * @deprecated Use {@link String#String(byte[],String)} */ - @Deprecated - public static String toString(byte[] input, String encoding) - throws IOException { - if (encoding == null) { - return new String(input); - } else { - return new String(input, encoding); - } + public static String toString(byte[] input, String encoding) throws IOException { + return new String(input, toCharset(encoding)); } // readLines @@ -802,7 +876,25 @@ public class IOUtils { * @since 1.1 */ public static List<String> readLines(InputStream input) throws IOException { - InputStreamReader reader = new InputStreamReader(input); + return readLines(input, Charset.defaultCharset()); + } + + /** + * Get the contents of an <code>InputStream</code> as a list of Strings, + * one entry per line, using the specified character encoding. + * <p> + * This method buffers the input internally, so there is no need to use a + * <code>BufferedInputStream</code>. + * + * @param input the <code>InputStream</code> to read from, not null + * @param encoding the encoding to use, null means platform default + * @return the list of Strings, never null + * @throws NullPointerException if the input is null + * @throws IOException if an I/O error occurs + * @since 2.3 + */ + public static List<String> readLines(InputStream input, Charset encoding) throws IOException { + InputStreamReader reader = new InputStreamReader(input, toCharset(encoding)); return readLines(reader); } @@ -824,12 +916,7 @@ public class IOUtils { * @since 1.1 */ public static List<String> readLines(InputStream input, String encoding) throws IOException { - if (encoding == null) { - return readLines(input); - } else { - InputStreamReader reader = new InputStreamReader(input, encoding); - return readLines(reader); - } + return readLines(input, toCharset(encoding)); } /** @@ -902,6 +989,40 @@ public class IOUtils { * The recommended usage pattern is: * <pre> * try { + * LineIterator it = IOUtils.lineIterator(stream, charset); + * while (it.hasNext()) { + * String line = it.nextLine(); + * /// do something with line + * } + * } finally { + * IOUtils.closeQuietly(stream); + * } + * </pre> + * + * @param input the <code>InputStream</code> to read from, not null + * @param encoding the encoding to use, null means platform default + * @return an Iterator of the lines in the reader, never null + * @throws IllegalArgumentException if the input is null + * @throws IOException if an I/O error occurs, such as if the encoding is invalid + * @since 2.3 + */ + public static LineIterator lineIterator(InputStream input, Charset encoding) throws IOException { + return new LineIterator(new InputStreamReader(input, toCharset(encoding))); + } + + /** + * Return an Iterator for the lines in an <code>InputStream</code>, using + * the character encoding specified (or default encoding if null). + * <p> + * <code>LineIterator</code> holds a reference to the open + * <code>InputStream</code> specified here. When you have finished with + * the iterator you should close the stream to free internal resources. + * This can be done by closing the stream directly, or by calling + * {@link LineIterator#close()} or {@link LineIterator#closeQuietly(LineIterator)}. + * <p> + * The recommended usage pattern is: + * <pre> + * try { * LineIterator it = IOUtils.lineIterator(stream, "UTF-8"); * while (it.hasNext()) { * String line = it.nextLine(); @@ -919,15 +1040,8 @@ public class IOUtils { * @throws IOException if an I/O error occurs, such as if the encoding is invalid * @since 1.2 */ - public static LineIterator lineIterator(InputStream input, String encoding) - throws IOException { - Reader reader = null; - if (encoding == null) { - reader = new InputStreamReader(input); - } else { - reader = new InputStreamReader(input, encoding); - } - return new LineIterator(reader); + public static LineIterator lineIterator(InputStream input, String encoding) throws IOException { + return lineIterator(input, toCharset(encoding)); } //----------------------------------------------------------------------- @@ -940,7 +1054,20 @@ public class IOUtils { * @since 2.0 */ public static InputStream toInputStream(CharSequence input) { - return toInputStream(input.toString()); + return toInputStream(input, Charset.defaultCharset()); + } + + /** + * Convert the specified CharSequence to an input stream, encoded as bytes + * using the specified character encoding. + * + * @param input the CharSequence to convert + * @param encoding the encoding to use, null means platform default + * @return an input stream + * @since 2.3 + */ + public static InputStream toInputStream(CharSequence input, Charset encoding) { + return toInputStream(input.toString(), encoding); } /** @@ -957,7 +1084,7 @@ public class IOUtils { * @since 2.0 */ public static InputStream toInputStream(CharSequence input, String encoding) throws IOException { - return toInputStream(input.toString(), encoding); + return toInputStream(input, toCharset(encoding)); } //----------------------------------------------------------------------- @@ -970,8 +1097,20 @@ public class IOUtils { * @since 1.1 */ public static InputStream toInputStream(String input) { - byte[] bytes = input.getBytes(); - return new ByteArrayInputStream(bytes); + return toInputStream(input, Charset.defaultCharset()); + } + + /** + * Convert the specified string to an input stream, encoded as bytes + * using the specified character encoding. + * + * @param input the string to convert + * @param encoding the encoding to use, null means platform default + * @return an input stream + * @since 2.3 + */ + public static InputStream toInputStream(String input, Charset encoding) { + return new ByteArrayInputStream(input.getBytes(toCharset(encoding))); } /** @@ -988,7 +1127,7 @@ public class IOUtils { * @since 1.1 */ public static InputStream toInputStream(String input, String encoding) throws IOException { - byte[] bytes = encoding != null ? input.getBytes(encoding) : input.getBytes(); + byte[] bytes = input.getBytes(toCharset(encoding)); return new ByteArrayInputStream(bytes); } @@ -1025,8 +1164,26 @@ public class IOUtils { * @since 1.1 */ public static void write(byte[] data, Writer output) throws IOException { + write(data, output, Charset.defaultCharset()); + } + + /** + * Writes bytes from a <code>byte[]</code> to chars on a <code>Writer</code> + * using the specified character encoding. + * <p> + * This method uses {@link String#String(byte[], String)}. + * + * @param data the byte array to write, do not modify during output, + * null ignored + * @param output the <code>Writer</code> to write to + * @param encoding the encoding to use, null means platform default + * @throws NullPointerException if output is null + * @throws IOException if an I/O error occurs + * @since 2.3 + */ + public static void write(byte[] data, Writer output, Charset encoding) throws IOException { if (data != null) { - output.write(new String(data)); + output.write(new String(data, toCharset(encoding))); } } @@ -1047,15 +1204,8 @@ public class IOUtils { * @throws IOException if an I/O error occurs * @since 1.1 */ - public static void write(byte[] data, Writer output, String encoding) - throws IOException { - if (data != null) { - if (encoding == null) { - write(data, output); - } else { - output.write(new String(data, encoding)); - } - } + public static void write(byte[] data, Writer output, String encoding) throws IOException { + write(data, output, toCharset(encoding)); } // write char[] @@ -1093,8 +1243,27 @@ public class IOUtils { */ public static void write(char[] data, OutputStream output) throws IOException { + write(data, output, Charset.defaultCharset()); + } + + /** + * Writes chars from a <code>char[]</code> to bytes on an + * <code>OutputStream</code> using the specified character encoding. + * <p> + * This method uses {@link String#String(char[])} and + * {@link String#getBytes(String)}. + * + * @param data the char array to write, do not modify during output, + * null ignored + * @param output the <code>OutputStream</code> to write to + * @param encoding the encoding to use, null means platform default + * @throws NullPointerException if output is null + * @throws IOException if an I/O error occurs + * @since 2.3 + */ + public static void write(char[] data, OutputStream output, Charset encoding) throws IOException { if (data != null) { - output.write(new String(data).getBytes()); + output.write(new String(data).getBytes(toCharset(encoding))); } } @@ -1118,13 +1287,7 @@ public class IOUtils { */ public static void write(char[] data, OutputStream output, String encoding) throws IOException { - if (data != null) { - if (encoding == null) { - write(data, output); - } else { - output.write(new String(data).getBytes(encoding)); - } - } + write(data, output, toCharset(encoding)); } // write CharSequence @@ -1159,8 +1322,25 @@ public class IOUtils { */ public static void write(CharSequence data, OutputStream output) throws IOException { + write(data, output, Charset.defaultCharset()); + } + + /** + * Writes chars from a <code>CharSequence</code> to bytes on an + * <code>OutputStream</code> using the specified character encoding. + * <p> + * This method uses {@link String#getBytes(String)}. + * + * @param data the <code>CharSequence</code> to write, null ignored + * @param output the <code>OutputStream</code> to write to + * @param encoding the encoding to use, null means platform default + * @throws NullPointerException if output is null + * @throws IOException if an I/O error occurs + * @since 2.3 + */ + public static void write(CharSequence data, OutputStream output, Charset encoding) throws IOException { if (data != null) { - write(data.toString(), output); + write(data.toString(), output, encoding); } } @@ -1180,11 +1360,8 @@ public class IOUtils { * @throws IOException if an I/O error occurs * @since 2.0 */ - public static void write(CharSequence data, OutputStream output, String encoding) - throws IOException { - if (data != null) { - write(data.toString(), output, encoding); - } + public static void write(CharSequence data, OutputStream output, String encoding) throws IOException { + write(data, output, toCharset(encoding)); } // write String @@ -1219,8 +1396,25 @@ public class IOUtils { */ public static void write(String data, OutputStream output) throws IOException { + write(data, output, Charset.defaultCharset()); + } + + /** + * Writes chars from a <code>String</code> to bytes on an + * <code>OutputStream</code> using the specified character encoding. + * <p> + * This method uses {@link String#getBytes(String)}. + * + * @param data the <code>String</code> to write, null ignored + * @param output the <code>OutputStream</code> to write to + * @param encoding the encoding to use, null means platform default + * @throws NullPointerException if output is null + * @throws IOException if an I/O error occurs + * @since 2.3 + */ + public static void write(String data, OutputStream output, Charset encoding) throws IOException { if (data != null) { - output.write(data.getBytes()); + output.write(data.getBytes(toCharset(encoding))); } } @@ -1242,13 +1436,7 @@ public class IOUtils { */ public static void write(String data, OutputStream output, String encoding) throws IOException { - if (data != null) { - if (encoding == null) { - write(data, output); - } else { - output.write(data.getBytes(encoding)); - } - } + write(data, output, toCharset(encoding)); } // write StringBuffer @@ -1288,9 +1476,7 @@ public class IOUtils { @Deprecated public static void write(StringBuffer data, OutputStream output) throws IOException { - if (data != null) { - output.write(data.toString().getBytes()); - } + write(data, output, (String) null); } /** @@ -1311,14 +1497,9 @@ public class IOUtils { * @deprecated replaced by write(CharSequence, OutputStream, String) */ @Deprecated - public static void write(StringBuffer data, OutputStream output, - String encoding) throws IOException { + public static void write(StringBuffer data, OutputStream output, String encoding) throws IOException { if (data != null) { - if (encoding == null) { - write(data, output); - } else { - output.write(data.toString().getBytes(encoding)); - } + output.write(data.toString().getBytes(toCharset(encoding))); } } @@ -1338,17 +1519,36 @@ public class IOUtils { */ public static void writeLines(Collection<?> lines, String lineEnding, OutputStream output) throws IOException { + writeLines(lines, lineEnding, output, Charset.defaultCharset()); + } + + /** + * Writes the <code>toString()</code> value of each item in a collection to + * an <code>OutputStream</code> line by line, using the specified character + * encoding and the specified line ending. + * + * @param lines the lines to write, null entries produce blank lines + * @param lineEnding the line separator to use, null is system default + * @param output the <code>OutputStream</code> to write to, not null, not closed + * @param encoding the encoding to use, null means platform default + * @throws NullPointerException if the output is null + * @throws IOException if an I/O error occurs + * @since 2.3 + */ + public static void writeLines(Collection<?> lines, String lineEnding, OutputStream output, Charset encoding) + throws IOException { if (lines == null) { return; } if (lineEnding == null) { lineEnding = LINE_SEPARATOR; } + Charset cs = toCharset(encoding); for (Object line : lines) { if (line != null) { - output.write(line.toString().getBytes()); + output.write(line.toString().getBytes(cs)); } - output.write(lineEnding.getBytes()); + output.write(lineEnding.getBytes(cs)); } } @@ -1370,22 +1570,7 @@ public class IOUtils { */ public static void writeLines(Collection<?> lines, String lineEnding, OutputStream output, String encoding) throws IOException { - if (encoding == null) { - writeLines(lines, lineEnding, output); - } else { - if (lines == null) { - return; - } - if (lineEnding == null) { - lineEnding = LINE_SEPARATOR; - } - for (Object line : lines) { - if (line != null) { - output.write(line.toString().getBytes(encoding)); - } - output.write(lineEnding.getBytes(encoding)); - } - } + writeLines(lines, lineEnding, output, toCharset(encoding)); } /** @@ -1579,7 +1764,27 @@ public class IOUtils { */ public static void copy(InputStream input, Writer output) throws IOException { - InputStreamReader in = new InputStreamReader(input); + copy(input, output, Charset.defaultCharset()); + } + + /** + * Copy bytes from an <code>InputStream</code> to chars on a + * <code>Writer</code> using the specified character encoding. + * <p> + * This method buffers the input internally, so there is no need to use a + * <code>BufferedInputStream</code>. + * <p> + * This method uses {@link InputStreamReader}. + * + * @param input the <code>InputStream</code> to read from + * @param output the <code>Writer</code> to write to + * @param encoding the encoding to use, null means platform default + * @throws NullPointerException if the input or output is null + * @throws IOException if an I/O error occurs + * @since 2.3 + */ + public static void copy(InputStream input, Writer output, Charset encoding) throws IOException { + InputStreamReader in = new InputStreamReader(input, toCharset(encoding)); copy(in, output); } @@ -1602,14 +1807,8 @@ public class IOUtils { * @throws IOException if an I/O error occurs * @since 1.1 */ - public static void copy(InputStream input, Writer output, String encoding) - throws IOException { - if (encoding == null) { - copy(input, output); - } else { - InputStreamReader in = new InputStreamReader(input, encoding); - copy(in, output); - } + public static void copy(InputStream input, Writer output, String encoding) throws IOException { + copy(input, output, toCharset(encoding)); } // copy from Reader @@ -1773,10 +1972,37 @@ public class IOUtils { */ public static void copy(Reader input, OutputStream output) throws IOException { - OutputStreamWriter out = new OutputStreamWriter(output); + copy(input, output, Charset.defaultCharset()); + } + + /** + * Copy chars from a <code>Reader</code> to bytes on an + * <code>OutputStream</code> using the specified character encoding, and + * calling flush. + * <p> + * This method buffers the input internally, so there is no need to use a + * <code>BufferedReader</code>. + * </p> + * <p> + * Due to the implementation of OutputStreamWriter, this method performs a + * flush. + * </p> + * <p> + * This method uses {@link OutputStreamWriter}. + * </p> + * + * @param input the <code>Reader</code> to read from + * @param output the <code>OutputStream</code> to write to + * @param encoding the encoding to use, null means platform default + * @throws NullPointerException if the input or output is null + * @throws IOException if an I/O error occurs + * @since 2.3 + */ + public static void copy(Reader input, OutputStream output, Charset encoding) throws IOException { + OutputStreamWriter out = new OutputStreamWriter(output, toCharset(encoding)); copy(input, out); - // XXX Unless anyone is planning on rewriting OutputStreamWriter, we - // have to flush here. + // XXX Unless anyone is planning on rewriting OutputStreamWriter, + // we have to flush here. out.flush(); } @@ -1803,17 +2029,34 @@ public class IOUtils { * @throws IOException if an I/O error occurs * @since 1.1 */ - public static void copy(Reader input, OutputStream output, String encoding) - throws IOException { - if (encoding == null) { - copy(input, output); - } else { - OutputStreamWriter out = new OutputStreamWriter(output, encoding); - copy(input, out); - // XXX Unless anyone is planning on rewriting OutputStreamWriter, - // we have to flush here. - out.flush(); - } + public static void copy(Reader input, OutputStream output, String encoding) throws IOException { + copy(input, output, toCharset(encoding)); + } + + /** + * Returns the given Charset or the default Charset if the given Charset is null. + * + * @param charset + * A charset or null. + * @return the given Charset or the default Charset if the given Charset is null + * @since 2.3 + */ + public static Charset toCharset(Charset charset) { + return charset == null ? Charset.defaultCharset() : charset; + } + + /** + * Returns a Charset for the named charset. If the name is null, return the default Charset. + * + * @param charset + * The name of the requested charset, may be null. + * @return a Charset for the named charset + * @throws UnsupportedCharsetException + * If the named charset is unavailable + * @since 2.3 + */ + public static Charset toCharset(String charset) { + return charset == null ? Charset.defaultCharset() : Charset.forName(charset); } // content equals Modified: commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsCopyTestCase.java URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsCopyTestCase.java?rev=1307397&r1=1307396&r2=1307397&view=diff ============================================================================== --- commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsCopyTestCase.java (original) +++ commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsCopyTestCase.java Fri Mar 30 13:12:16 2012 @@ -201,7 +201,7 @@ public class IOUtilsCopyTestCase extends YellOnFlushAndCloseOutputStream out = new YellOnFlushAndCloseOutputStream(baout, true, true); Writer writer = new OutputStreamWriter(baout, "US-ASCII"); - IOUtils.copy(in, writer, null); + IOUtils.copy(in, writer, (String) null); out.off(); writer.flush(); @@ -295,7 +295,7 @@ public class IOUtilsCopyTestCase extends ByteArrayOutputStream baout = new ByteArrayOutputStream(); OutputStream out = new YellOnFlushAndCloseOutputStream(baout, false, true); - IOUtils.copy(reader, out, null); + IOUtils.copy(reader, out, (String) null); // note: this method *does* flush. // note: we don't flush here; this IOUtils method does it for us Modified: commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsTestCase.java URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsTestCase.java?rev=1307397&r1=1307396&r2=1307397&view=diff ============================================================================== --- commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsTestCase.java (original) +++ commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsTestCase.java Fri Mar 30 13:12:16 2012 @@ -33,15 +33,18 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.StringReader; +import java.io.UnsupportedEncodingException; import java.net.ServerSocket; import java.net.Socket; import java.net.URI; import java.net.URL; import java.nio.channels.Selector; +import java.nio.charset.Charset; import java.util.Arrays; import java.util.List; import org.apache.commons.io.testtools.FileBasedTestCase; +import org.junit.Assert; // Note: jdk1.2 dependency @@ -77,7 +80,7 @@ public class IOUtilsTestCase extends Fil createFile(m_testFile, FILE_SIZE); } catch (IOException ioe) { - throw new RuntimeException("Can't run this test because " + "environment could not be built: " + throw new RuntimeException("Can't run this test because the environment could not be built: " + ioe.getMessage()); } // Create and init a byte array as input data @@ -99,8 +102,8 @@ public class IOUtilsTestCase extends Fil iarr = null; try { FileUtils.deleteDirectory(getTestDirectory()); - } catch (IOException ioe) { - throw new RuntimeException("Could not clear up " + getTestDirectory()); + } catch (IOException e) { + throw new RuntimeException("Could not clear up " + getTestDirectory() + ": " + e); } } @@ -279,6 +282,21 @@ public class IOUtilsTestCase extends Fil deleteFile(destination); } + public void testToByteArray_Reader() throws IOException { + final String charsetName = "UTF-8"; + final byte[] expecteds = charsetName.getBytes(charsetName); + byte[] actuals = IOUtils.toByteArray(new InputStreamReader(new ByteArrayInputStream(expecteds))); + Assert.assertArrayEquals(expecteds, actuals); + actuals = IOUtils.toByteArray(new InputStreamReader(new ByteArrayInputStream(expecteds)), charsetName); + Assert.assertArrayEquals(expecteds, actuals); + } + + public void testToCharset() { + Assert.assertEquals(Charset.defaultCharset(), IOUtils.toCharset((String) null)); + Assert.assertEquals(Charset.defaultCharset(), IOUtils.toCharset((Charset) null)); + Assert.assertEquals(Charset.defaultCharset(), IOUtils.toCharset(Charset.defaultCharset())); + Assert.assertEquals(Charset.forName("UTF-8"), IOUtils.toCharset(Charset.forName("UTF-8"))); + } public void testInputStreamToByteArray() throws Exception { FileInputStream fin = new FileInputStream(m_testFile); try { @@ -443,7 +461,7 @@ public class IOUtilsTestCase extends Fil InputStream inStream = IOUtils.toInputStream(csq); byte[] bytes = IOUtils.toByteArray(inStream); assertEqualContent(csq.toString().getBytes(), bytes); - inStream = IOUtils.toInputStream(csq, null); + inStream = IOUtils.toInputStream(csq, (String) null); bytes = IOUtils.toByteArray(inStream); assertEqualContent(csq.toString().getBytes(), bytes); inStream = IOUtils.toInputStream(csq, "UTF-8"); @@ -464,7 +482,7 @@ public class IOUtilsTestCase extends Fil InputStream inStream = IOUtils.toInputStream(str); byte[] bytes = IOUtils.toByteArray(inStream); assertEqualContent(str.getBytes(), bytes); - inStream = IOUtils.toInputStream(str, null); + inStream = IOUtils.toInputStream(str, (String) null); bytes = IOUtils.toByteArray(inStream); assertEqualContent(str.getBytes(), bytes); inStream = IOUtils.toInputStream(str, "UTF-8"); Modified: commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsWriteTestCase.java URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsWriteTestCase.java?rev=1307397&r1=1307396&r2=1307397&view=diff ============================================================================== --- commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsWriteTestCase.java (original) +++ commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsWriteTestCase.java Fri Mar 30 13:12:16 2012 @@ -162,7 +162,7 @@ public class IOUtilsWriteTestCase extend YellOnFlushAndCloseOutputStream out = new YellOnFlushAndCloseOutputStream(baout, true, true); Writer writer = new OutputStreamWriter(baout, "US-ASCII"); - IOUtils.write(inData, writer, null); + IOUtils.write(inData, writer, (String) null); out.off(); writer.flush(); @@ -244,7 +244,7 @@ public class IOUtilsWriteTestCase extend ByteArrayOutputStream baout = new ByteArrayOutputStream(); YellOnFlushAndCloseOutputStream out = new YellOnFlushAndCloseOutputStream(baout, true, true); - IOUtils.write(csq, out, null); + IOUtils.write(csq, out, (String) null); out.off(); out.flush(); @@ -362,7 +362,7 @@ public class IOUtilsWriteTestCase extend ByteArrayOutputStream baout = new ByteArrayOutputStream(); YellOnFlushAndCloseOutputStream out = new YellOnFlushAndCloseOutputStream(baout, true, true); - IOUtils.write(str, out, null); + IOUtils.write(str, out, (String) null); out.off(); out.flush(); @@ -481,7 +481,7 @@ public class IOUtilsWriteTestCase extend ByteArrayOutputStream baout = new ByteArrayOutputStream(); YellOnFlushAndCloseOutputStream out = new YellOnFlushAndCloseOutputStream(baout, true, true); - IOUtils.write(str.toCharArray(), out, null); + IOUtils.write(str.toCharArray(), out, (String) null); out.off(); out.flush(); @@ -643,7 +643,7 @@ public class IOUtilsWriteTestCase extend ByteArrayOutputStream baout = new ByteArrayOutputStream(); YellOnFlushAndCloseOutputStream out = new YellOnFlushAndCloseOutputStream(baout, false, true); - IOUtils.writeLines(list, "*", out, null); + IOUtils.writeLines(list, "*", out, (String) null); out.off(); out.flush(); Modified: commons/proper/io/trunk/src/test/java/org/apache/commons/io/LineIteratorTestCase.java URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/test/java/org/apache/commons/io/LineIteratorTestCase.java?rev=1307397&r1=1307396&r2=1307397&view=diff ============================================================================== --- commons/proper/io/trunk/src/test/java/org/apache/commons/io/LineIteratorTestCase.java (original) +++ commons/proper/io/trunk/src/test/java/org/apache/commons/io/LineIteratorTestCase.java Fri Mar 30 13:12:16 2012 @@ -24,11 +24,15 @@ import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.io.UnsupportedEncodingException; +import java.nio.charset.UnsupportedCharsetException; import java.util.ArrayList; import java.util.List; import java.util.NoSuchElementException; import org.apache.commons.io.testtools.FileBasedTestCase; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; /** * This is used to test LineIterator for correctness. @@ -87,6 +91,7 @@ public class LineIteratorTestCase extend /** @see junit.framework.TestCase#setUp() */ @Override + @Before protected void setUp() throws Exception { File dir = getTestDirectory(); if (dir.exists()) { @@ -98,6 +103,7 @@ public class LineIteratorTestCase extend /** @see junit.framework.TestCase#tearDown() */ @Override + @After protected void tearDown() throws Exception { FileUtils.deleteDirectory(getTestDirectory()); } @@ -106,6 +112,7 @@ public class LineIteratorTestCase extend /** * Test constructor. */ + @Test public void testConstructor() throws Exception { try { new LineIterator((Reader) null); @@ -118,6 +125,7 @@ public class LineIteratorTestCase extend /** * Test a file with no lines. */ + @Test public void testZeroLines() throws Exception { doTestFileWithSpecifiedLines(0); } @@ -125,6 +133,7 @@ public class LineIteratorTestCase extend /** * Test a file with 1 line. */ + @Test public void testOneLines() throws Exception { doTestFileWithSpecifiedLines(1); } @@ -132,6 +141,7 @@ public class LineIteratorTestCase extend /** * Test a file with 2 lines. */ + @Test public void testTwoLines() throws Exception { doTestFileWithSpecifiedLines(2); } @@ -139,6 +149,7 @@ public class LineIteratorTestCase extend /** * Test a file with 3 lines. */ + @Test public void testThreeLines() throws Exception { doTestFileWithSpecifiedLines(3); } @@ -146,6 +157,7 @@ public class LineIteratorTestCase extend /** * Test a missing File. */ + @Test public void testMissingFile() throws Exception { File testFile = new File(getTestDirectory(), "dummy-missing-file.txt"); @@ -163,6 +175,7 @@ public class LineIteratorTestCase extend /** * Test a file with a Valid encoding. */ + @Test public void testValidEncoding() throws Exception { String encoding = "UTF-8"; @@ -185,6 +198,7 @@ public class LineIteratorTestCase extend /** * Test a file with an Invalid encoding. */ + @Test public void testInvalidEncoding() throws Exception { String encoding = "XXXXXXXX"; @@ -194,8 +208,8 @@ public class LineIteratorTestCase extend LineIterator iterator = null; try { iterator = FileUtils.lineIterator(testFile, encoding); - fail("Expected UnsupportedEncodingException"); - } catch (UnsupportedEncodingException expected) { + fail("Expected UnsupportedCharsetException"); + } catch (UnsupportedCharsetException expected) { // ignore, expected result } finally { LineIterator.closeQuietly(iterator); @@ -205,6 +219,7 @@ public class LineIteratorTestCase extend /** * Test the iterator using only the nextLine() method. */ + @Test public void testNextLineOnlyDefaultEncoding() throws Exception { File testFile = new File(getTestDirectory(), "LineIterator-nextOnly.txt"); List<String> lines = createLinesFile(testFile, 3); @@ -216,6 +231,7 @@ public class LineIteratorTestCase extend /** * Test the iterator using only the nextLine() method. */ + @Test public void testNextLineOnlyNullEncoding() throws Exception { String encoding = null; @@ -229,6 +245,7 @@ public class LineIteratorTestCase extend /** * Test the iterator using only the nextLine() method. */ + @Test public void testNextLineOnlyUtf8Encoding() throws Exception { String encoding = "UTF-8"; @@ -242,6 +259,7 @@ public class LineIteratorTestCase extend /** * Test the iterator using only the next() method. */ + @Test public void testNextOnly() throws Exception { String encoding = null; @@ -263,6 +281,7 @@ public class LineIteratorTestCase extend /** * Tests hasNext when it throws an exception. */ + @Test public void testNextWithException() throws Exception { Reader reader = new BufferedReader(new StringReader("")) { @Override @@ -281,6 +300,7 @@ public class LineIteratorTestCase extend /** * Test closing the iterator before all the file has been processed. */ + @Test public void testCloseEarly() throws Exception { String encoding = "UTF-8"; @@ -375,6 +395,7 @@ public class LineIteratorTestCase extend } // ----------------------------------------------------------------------- + @Test public void testFilteringFileReader() throws Exception { String encoding = "UTF-8"; @@ -386,6 +407,7 @@ public class LineIteratorTestCase extend this.testFiltering(lines, reader); } + @Test public void testFilteringBufferedReader() throws Exception { String encoding = "UTF-8";