|  | ## Licensed to the Apache Software Foundation (ASF) under one | 
|  | ## or more contributor license agreements.  See the NOTICE file | 
|  | ## distributed with this work for additional information | 
|  | ## regarding copyright ownership.  The ASF licenses this file | 
|  | ## to you under the Apache License, Version 2.0 (the | 
|  | ## "License"); you may not use this file except in compliance | 
|  | ## with the License.  You may obtain a copy of the License at | 
|  | ## | 
|  | ##  http://www.apache.org/licenses/LICENSE-2.0 | 
|  | ## | 
|  | ## Unless required by applicable law or agreed to in writing, | 
|  | ## software distributed under the License is distributed on an | 
|  | ## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
|  | ## KIND, either express or implied.  See the License for the | 
|  | ## specific language governing permissions and limitations | 
|  | ## under the License. | 
|  |  | 
|  | Apache Commons IO | 
|  | Version ${version} | 
|  | Release Notes | 
|  |  | 
|  | INTRODUCTION: | 
|  |  | 
|  | Commons IO is a package of Java utility classes like java.io. | 
|  | Classes in this package are considered to be so standard and of such high | 
|  | reuse as to justify existence in java.io. | 
|  |  | 
|  | $introduction.replaceAll("(?<!\015)\012", " | 
|  | ") | 
|  |  | 
|  | ============================================================================== | 
|  | Apache Commons IO Version ${version} | 
|  | ============================================================================== | 
|  | ## | 
|  | ## N.B. the available variables are described here: | 
|  | ## http://maven.apache.org/plugins/maven-changes-plugin/examples/using-a-custom-announcement-template.html | 
|  | ## | 
|  | ## Hack to improve layout: replace all pairs of spaces with a single new-line | 
|  | $release.description.replaceAll("  ", " | 
|  | ") | 
|  |  | 
|  | ## | 
|  | #if ($release.getActions().size() == 0) | 
|  | No changes defined in this version. | 
|  | #else | 
|  | Changes in this version include: | 
|  |  | 
|  | ## indent to be used if there is no issue attribute. | 
|  | ## should be the same as the indent in the changes.xml file | 
|  | ## less 2 spaces for the 'o' and trailing space | 
|  | #set($indent='          ') | 
|  | #if ($release.getActions('add').size() !=0) | 
|  | New features: | 
|  | #foreach($actionItem in $release.getActions('add')) | 
|  | ## Use replaceAll to fix up LF-only line ends on Windows. | 
|  | #set($action=$actionItem.getAction().replaceAll("\n"," | 
|  | ")) | 
|  | #if ($actionItem.getIssue()) | 
|  | #set($issue=$actionItem.getIssue()) | 
|  | #else | 
|  | #set($issue="") | 
|  | #end | 
|  | #if ($actionItem.getDueTo()) | 
|  | #set($dueto=$actionItem.getDueTo()) | 
|  | #else | 
|  | #set($dueto="") | 
|  | #end | 
|  | o#if($!issue != "") $issue: #else$indent#end ${action} #if($!dueto != "")Thanks to $dueto. #end | 
|  |  | 
|  | #set($issue="") | 
|  | #set($dueto="") | 
|  | #end | 
|  | #end | 
|  |  | 
|  | #if ($release.getActions('fix').size() !=0) | 
|  | Fixed Bugs: | 
|  | #foreach($actionItem in $release.getActions('fix')) | 
|  | ## Use replaceAll to fix up LF-only line ends on Windows. | 
|  | #set($action=$actionItem.getAction().replaceAll("\n"," | 
|  | ")) | 
|  | #if ($actionItem.getIssue()) | 
|  | #set($issue=$actionItem.getIssue()) | 
|  | #else | 
|  | #set($issue="") | 
|  | #end | 
|  | #if ($actionItem.getDueTo()) | 
|  | #set($dueto=$actionItem.getDueTo()) | 
|  | #else | 
|  | #set($dueto="") | 
|  | #end | 
|  | o#if($!issue != "") $issue: #else$indent#end ${action} #if($!dueto != "")Thanks to $dueto. #end | 
|  |  | 
|  | #set($issue="") | 
|  | #set($dueto="") | 
|  | #end | 
|  | #end | 
|  |  | 
|  | #if ($release.getActions('update').size() !=0) | 
|  | Changes: | 
|  | #foreach($actionItem in $release.getActions('update')) | 
|  | ## Use replaceAll to fix up LF-only line ends on Windows. | 
|  | #set($action=$actionItem.getAction().replaceAll("\n"," | 
|  | ")) | 
|  | #if ($actionItem.getIssue()) | 
|  | #set($issue=$actionItem.getIssue()) | 
|  | #else | 
|  | #set($issue="") | 
|  | #end | 
|  | #if ($actionItem.getDueTo()) | 
|  | #set($dueto=$actionItem.getDueTo()) | 
|  | #else | 
|  | #set($dueto="") | 
|  | #end | 
|  | o#if($!issue != "") $issue: #else$indent#end ${action} #if($!dueto != "")Thanks to $dueto. #end | 
|  |  | 
|  | #set($issue="") | 
|  | #set($dueto="") | 
|  | #end | 
|  | #end | 
|  |  | 
|  | #if ($release.getActions('remove').size() !=0) | 
|  | Removed: | 
|  | #foreach($actionItem in $release.getActions('remove')) | 
|  | ## Use replaceAll to fix up LF-only line ends on Windows. | 
|  | #set($action=$actionItem.getAction().replaceAll("\n"," | 
|  | ")) | 
|  | #if ($actionItem.getIssue()) | 
|  | #set($issue=$actionItem.getIssue()) | 
|  | #else | 
|  | #set($issue="") | 
|  | #end | 
|  | #if ($actionItem.getDueTo()) | 
|  | #set($dueto=$actionItem.getDueTo()) | 
|  | #else | 
|  | #set($dueto="") | 
|  | #end | 
|  | o#if($!issue != "") $issue: #else$indent#end ${action} #if($!dueto != "")Thanks to $dueto. #end | 
|  | ## | 
|  | #set($issue="") | 
|  | #set($dueto="") | 
|  | #end | 
|  | #end | 
|  | ## End of main loop | 
|  | #end | 
|  | ## | 
|  | Compatibility with 2.3: | 
|  | Binary compatible: Yes. | 
|  | Source compatible: Yes. | 
|  | Semantic compatible: Yes. | 
|  |  | 
|  | Compatibility with 2.2 and 1.4: | 
|  | Binary compatible: Yes. | 
|  | Source compatible: No, see the rare case in https://issues.apache.org/jira/browse/IO-318. | 
|  | Semantic compatible: No, see the rare case in https://issues.apache.org/jira/browse/IO-318. | 
|  |  | 
|  | Commons IO 2.4 requires JDK 1.6 or later. | 
|  | Commons IO 2.3 requires JDK 1.6 or later. | 
|  | Commons IO 2.2 requires JDK 1.5 or later. | 
|  | Commons IO 1.4 requires JDK 1.3 or later. | 
|  |  | 
|  | ============================================================================== | 
|  | Apache Commons IO Version 2.3 | 
|  | ============================================================================== | 
|  |  | 
|  | Changes in this version include: | 
|  |  | 
|  | New features: | 
|  | o IO-322:  Add and use class Charsets. Thanks to ggregory. | 
|  | o IO-321:  ByteOrderMark UTF_32LE is incorrect. Thanks to ggregory. | 
|  | o IO-318:  Add Charset sister APIs to method that take a String charset name. Thanks to ggregory. | 
|  |  | 
|  | Compatibility with 2.2 and 1.4: | 
|  | Binary compatible: Yes. | 
|  | Source compatible: No, see the rare case in https://issues.apache.org/jira/browse/IO-318. | 
|  | Semantic compatible: No, see the rare case in https://issues.apache.org/jira/browse/IO-318. | 
|  |  | 
|  | Commons IO 2.3 requires JDK 1.6 or later. | 
|  | Commons IO 2.2 requires JDK 1.5 or later. | 
|  | Commons IO 1.4 requires JDK 1.3 or later. | 
|  |  | 
|  | ============================================================================== | 
|  | Apache Commons IO Version 2.2 | 
|  | ============================================================================== | 
|  |  | 
|  | Changes in this version include: | 
|  |  | 
|  | New features: | 
|  | o Add IOUTils.toBufferedReader(Reader)  Issue: IO-313. Thanks to ggregory. | 
|  | o Allow applications to provide buffer (or size) for copyLarge methods.  Issue: IO-308. Thanks to Manoj Mokashi. | 
|  | o New copyLarge() method in IOUtils that takes additional offset, length arguments  Issue: IO-305. Thanks to Manoj Mokashi. | 
|  | o Use terabyte (TB), petabyte (PB) and exabyte (EB) in FileUtils.byteCountToDisplaySize(long size)  Issue: IO-287. Thanks to Ron Kuris, Gary Gregory. | 
|  | o FileUtils.listFiles() doesn't return directories  Issue: IO-173. Thanks to Marcos VinÃcius da Silva. | 
|  | o CharSequenceInputStream to efficiently stream content of a CharSequence  Issue: IO-297. Thanks to Oleg Kalnichevski. | 
|  | o The second constructor of Tailer class does not pass 'delay' to the third one  Issue: IO-304. Thanks to liangly. | 
|  | o TeeOutputStream does not call branch.close() when main.close() throws an exception  Issue: IO-303. Thanks to fabian.barney. | 
|  | o ArrayIndexOutOfBoundsException in BOMInputStream when reading a file without BOM multiple times  Issue: IO-302. Thanks to jsteuerwald, detinho. | 
|  | o Add IOUtils.closeQuietly(Selector) necessary  Issue: IO-301. Thanks to kaykay.unique. | 
|  | o IOUtils.closeQuietly() should take a ServerSocket as a parameter  Issue: IO-292. Thanks to sebb. | 
|  | o Add read/readFully methods to IOUtils  Issue: IO-290. Thanks to sebb. | 
|  | o Supply a ReversedLinesFileReader  Issue: IO-288. Thanks to Georg Henzler. | 
|  | o Add new function FileUtils.directoryContains.  Issue: IO-291. Thanks to ggregory. | 
|  | o FileUtils.contentEquals and IOUtils.contentEquals - Add option to ignore "line endings" | 
|  | Added contentEqualsIgnoreEOL methods to both classes  Issue: IO-275. Thanks to CJ Aspromgos. | 
|  |  | 
|  | Fixed Bugs: | 
|  | o IOUtils.read(InputStream/Reader) ignores the offset parameter  Issue: IO-311. Thanks to Robert Muir. | 
|  | o CharSequenceInputStream(CharSequence s, Charset charset, int bufferSize) ignores bufferSize  Issue: IO-312. | 
|  | o FileUtils.moveDirectoryToDirectory removes source directory if destination is a subdirectory  Issue: IO-300. | 
|  | o ReaderInputStream#read(byte[] b, int off, int len) should check for valid parameters  Issue: IO-307. | 
|  | o ReaderInputStream#read(byte[] b, int off, int len) should always return 0 for length == 0  Issue: IO-306. | 
|  | o "FileUtils#deleteDirectoryOnExit(File)" does not work  Issue: IO-276. Thanks to nkami. | 
|  | o BoundedInputStream.read() treats max differently from BoundedInputStream.read(byte[]...)  Issue: IO-273. Thanks to sebb. | 
|  | o Various methods of class 'org.apache.commons.io.FileUtils' incorrectly suppress 'java.io.IOException'  Issue: IO-298. Thanks to Christian Schulte. | 
|  |  | 
|  | Changes: | 
|  | o ReaderInputStream optimization: more efficient reading of small chunks of data  Issue: IO-296. Thanks to Oleg Kalnichevski. | 
|  |  | 
|  |  | 
|  | Compatibility with 2.1 and 1.4: | 
|  | Binary compatible: Yes | 
|  | Source compatible: Yes | 
|  | Semantic compatible: Yes. Check the bug fixes section for semantic bug fixes | 
|  |  | 
|  | Commons IO 2.2 requires a minimum of JDK 1.5. | 
|  | Commons IO 1.4 requires a minimum of JDK 1.3. | 
|  |  | 
|  | ============================================================================== | 
|  | Apache Commons IO Version 2.1 | 
|  | ============================================================================== | 
|  |  | 
|  | New features: | 
|  | o Use standard Maven directory layout  Issue: IO-285. Thanks to ggregory. | 
|  | o Add IOUtils API toString for URL and URI to get contents  Issue: IO-284. Thanks to ggregory. | 
|  | o Add API FileUtils.copyFile(File input, OutputStream output)  Issue: IO-282. Thanks to ggregory. | 
|  | o FileAlterationObserver has no getter for FileFilter  Issue: IO-262. | 
|  | o Add FileUtils.getFile API with varargs parameter  Issue: IO-261. | 
|  | o Add new APPEND parameter for writing string into files  Issue: IO-182. | 
|  | o Add new read method "toByteArray" to handle InputStream with known size.  Issue: IO-251. Thanks to Marco Albini. | 
|  |  | 
|  | Fixed Bugs: | 
|  | o Dubious use of mkdirs() return code  Issue: IO-280. Thanks to sebb. | 
|  | o ReaderInputStream enters infinite loop when it encounters an unmappable character  Issue: IO-277. | 
|  | o FileUtils.moveFile() JavaDoc should specify FileExistsException thrown  Issue: IO-264. | 
|  | o ClassLoaderObjectInputStream does not handle Proxy classes  Issue: IO-260. | 
|  | o Tailer returning partial lines when reaching EOF before EOL  Issue: IO-274. Thanks to Frank Grimes. | 
|  | o FileUtils.copyFile() throws IOException when copying large files to a shared directory (on Windows)  Issue: IO-266. Thanks to Igor Smereka. | 
|  | o FileSystemUtils.freeSpaceKb throws exception for Windows volumes with no visible files. | 
|  | Improve coverage by also looking for hidden files.  Issue: IO-263. Thanks to Gil Adam. | 
|  |  | 
|  | Changes: | 
|  | o FileAlterationMonitor.stop(boolean allowIntervalToFinish)  Issue: IO-259. | 
|  |  | 
|  | ============================================================================== | 
|  | Apache Commons IO Package 2.0.1 | 
|  | ============================================================================== | 
|  |  | 
|  | Compatibility with 2.0 and 1.4 | 
|  | ------------------------------ | 
|  | Binary compatible - Yes | 
|  |  | 
|  | Source compatible - Yes | 
|  |  | 
|  | Semantic compatible - Yes | 
|  | Check the bug fixes section for semantic bug fixes | 
|  |  | 
|  | Commons IO 2.0.1 requires a minimum of JDK 1.5 | 
|  | (Commons IO 1.4 had a minimum of JDK 1.3) | 
|  |  | 
|  | Enhancements from 2.0 | 
|  | --------------------- | 
|  |  | 
|  | * [IO-256] - Provide thread factory for FileAlternationMonitor | 
|  |  | 
|  | Bug fixes from 2.0 | 
|  | ------------------ | 
|  |  | 
|  | * [IO-257] - BOMInputStream.read(byte[]) can return 0 which it should not | 
|  | * [IO-258] - XmlStreamReader consumes the stream during encoding detection | 
|  |  | 
|  | ============================================================================== | 
|  | Apache Commons IO Package 2.0 | 
|  | ============================================================================== | 
|  |  | 
|  | Compatibility with 1.4 | 
|  | ---------------------- | 
|  | Binary compatible - Yes | 
|  |  | 
|  | Source compatible - Yes | 
|  |  | 
|  | Semantic compatible - Yes | 
|  | Check the bug fixes section for semantic bug fixes | 
|  |  | 
|  | Commons IO 2.0 requires a minimum of JDK 1.5 | 
|  | (Commons IO 1.4 had a minimum of JDK 1.3) | 
|  |  | 
|  | Deprecations from 1.4 | 
|  | --------------------- | 
|  |  | 
|  | - IOUtils | 
|  | - write(StringBuffer, Writer) in favour of write(CharSequence, Writer) | 
|  | - write(StringBuffer, OutputStream)  in favour of write(CharSequence, OutputStream) | 
|  | - write(StringBuffer, OutputStream, String) in favour of write(CharSequence, OutputStream, String) | 
|  |  | 
|  | - FileFilterUtils | 
|  | - andFileFilter(IOFileFilter, IOFileFilter) in favour of and(IOFileFilter...) | 
|  | - orFileFilter(IOFileFilter, IOFileFilter)  in favour of or(IOFileFilter...) | 
|  |  | 
|  | Enhancements from 1.4 | 
|  | --------------------- | 
|  |  | 
|  | * [IO-140] Move minimum Java requirement from JDK 1.3 to JDK 1.5 | 
|  | - use Generics | 
|  | - add new CharSequence write() flavour methods to IOUtils and FileUtils | 
|  | - replace StringBuffer with StringBuilder, where appropriate | 
|  | - add new Reader/Writer methods to ProxyReader and ProxyWriter | 
|  | - Annotate with @Override and @Deprecated | 
|  |  | 
|  | * [IO-178] New BOMInputStream and ByteOrderMark implementations - to detect and optionally exclude an initial Byte Order mark (BOM) | 
|  | * [IO-197] New BoundedInputStream (copied from from Apache JackRabbit) | 
|  | * [IO-193] New Broken Input and Output streams | 
|  | * [IO-132] New File Listener/Monitor facility | 
|  | * [IO-158] New ReaderInputStream and WriterOutputStream implementations | 
|  | * [IO-139] New StringBuilder Writer implementation | 
|  | * [IO-192] New Tagged Input and Output streams | 
|  | * [IO-177] New Tailer class - simple implementation of the Unix "tail -f" functionality | 
|  | * [IO-162] New XML Stream Reader/Writer implementations (from ROME via plexus-utils) | 
|  |  | 
|  | * [IO-142] Comparators - add facility to sort file lists/arrays | 
|  | * [IO-186] Comparators - new Composite and Directory File Comparator implementations | 
|  | * [IO-176] DirectoryWalker - add filterDirectoryContents() callback method for filtering directory contents | 
|  | * [IO-210] FileFilter - new Magic Number FileFilter | 
|  | * [IO-221] FileFilterUtils - add methods for suffix and prefix filters which take an IOCase object | 
|  | * [IO-232] FileFilterUtils - add method for name filters which take an IOCase object | 
|  | * [IO-229] FileFilterUtils - add varargs and() and or() methods | 
|  | * [IO-198] FileFilterUtils - add ability to apply file filters to collections and arrays | 
|  | * [IO-156] FilenameUtils - add normalize() and normalizeNoEndSeparator() methods which allow the separator character to be specified | 
|  | * [IO-194] FileSystemUtils - add freeSpaceKb() method with no input arguments | 
|  | * [IO-185] FileSystemUtils - add freeSpaceKb() methods that take a timeout parameter - fixes freeSpaceWindows() blocks | 
|  | * [IO-155] FileUtils - use NIO to copy files | 
|  | * [IO-168] FileUtils - add new isSymlink() method | 
|  | * [IO-219] FileUtils - throw FileExistsException when moving a file or directory if the destination already exists | 
|  | * [IO-234] FileUtils - add Methods for retrieving System User/Temp directories/paths | 
|  | * [IO-208] FileUtils - add timeout (connection and read) support for copyURLToFile() method | 
|  | * [IO-238] FileUtils - add sizeOf(File) method | 
|  | * [IO-181] LineIterator now implements Iterable | 
|  | * [IO-224] IOUtils - add closeQuietly(Closeable) and closeQuietly(Socket) methods | 
|  | * [IO-203] IOUtils - add skipFully() method for InputStreams | 
|  | * [IO-137] IOUtils and ByteArrayOutputStream - add toBufferedInputStream() method to avoid unnecessary array allocation/copy | 
|  | * [IO-195] Proxy streams/Reader/Writer - provide exception handling methods | 
|  | * [IO-211] Proxy Input/Output streams - add pre/post processing support | 
|  | * [IO-242] Proxy Reader/Writer - add pre/post processing support | 
|  |  | 
|  | Bug fixes from 1.4 | 
|  | ------------------ | 
|  | * [IO-214] ByteArrayOutputStream - fix inconsistent synchronization of fields | 
|  | * [IO-201] Counting Input/Output streams - fix inconsistent synchronization | 
|  | * [IO-159] FileCleaningTracker - fix remove() never returns null | 
|  | * [IO-220] FileCleaningTracker - fix Vector performs badly under load | 
|  | * [IO-167] FilenameUtils - fix case-insensitive string handling in FilenameUtils and FilesystemUtils | 
|  | * [IO-179] FilenameUtils - fix StringIndexOutOfBounds exception in getPathNoEndSeparator() | 
|  | * [IO-248] FilenameUtils - fix getFullPathNoEndSeparator() returns empty while path is a one level directory | 
|  | * [IO-246] FilenameUtils - fix wildcardMatch gives incorrect results | 
|  | * [IO-187] FileSystemUtils - fix freeSpaceKb() doesn't work with relative paths on Linux | 
|  | * [IO-160] FileSystemUtils - fix freeSpace() fails on solaris | 
|  | * [IO-209] FileSystemUtils - fix freeSpaceKb() fails to return correct size for a windows mount point | 
|  | * [IO-163] FileUtils - fix toURLs() using deprecated method of conversion to URL | 
|  | * [IO-168] FileUtils - fix Symbolic links followed when deleting directory | 
|  | * [IO-231] FileUtils - fix wrong exception message generated in isFileNewer() method | 
|  | * [IO-207] FileUtils - fix race condition in forceMkdir() method | 
|  | * [IO-217] FileUtils - fix copyDirectoryToDirectory() makes infinite loops | 
|  | * [IO-166] FileUtils - fix URL decoding in toFile(URL) | 
|  | * [IO-190] FileUtils - fix copyDirectory not preserving lastmodified date on sub-directories | 
|  | * [IO-240] FileFilterUtils - ensure cvsFilter and svnFilter are only created once. | 
|  | * [IO-175] IOUtils - fix copyFile() issues with very large files | 
|  | * [IO-191] Improvements from static analysis | 
|  | * [IO-216] LockableFileWriter - delete files quietly when an exception is thrown during initialization | 
|  | * [IO-243] SwappedDataInputStream - fix readBoolean is inverted | 
|  | * [IO-235] Tests - remove unused YellOnFlushAndCloseOutputStream from CopyUtilsTest | 
|  | * [IO-161] Tests - fix FileCleaningTrackerTestCase hanging | 
|  |  | 
|  | Documentation changes from 1.4 | 
|  | ------------------------------ | 
|  | * [IO-183 FilenameUtils.getExtension() method documentation improvements | 
|  | * [IO-226 FileUtils.byteCountToDisplaySize() documentation corrections | 
|  | * [IO-205 FileUtils.forceMkdir() documentation improvements | 
|  | * [IO-215 FileUtils copy file/directory improve documentation regarding preserving the last modified date | 
|  | * [IO-189 HexDump.dump() method documentation improvements | 
|  | * [IO-171 IOCase document that it assumes there are only two OSes: Windows and Unix | 
|  | * [IO-223 IOUtils.copy() documentation corrections | 
|  | * [IO-247 IOUtils.closeQuietly() improve documentation with examples | 
|  | * [IO-202 NotFileFilter documentation corrections | 
|  | * [IO-206 ProxyInputStream - fix misleading parameter names | 
|  | * [IO-212 ProxyInputStream.skip() documentation corrections | 
|  |  | 
|  | ============================================================================== | 
|  | Apache Commons IO Version 1.4 | 
|  | ============================================================================== | 
|  |  | 
|  | Compatibility with 1.3.2 | 
|  | ------------------------ | 
|  | Binary compatible - Yes | 
|  |  | 
|  | Source compatible - Yes | 
|  |  | 
|  | Semantic compatible - Yes | 
|  | Check the bug fixes section for semantic bug fixes | 
|  |  | 
|  | Commons IO 1.4 introduces four new implementations which depend on JDK 1.4 features | 
|  | (CharSequenceReader, FileWriterWithEncoding, IOExceptionWithCause and RegexFileFilter). | 
|  | It has been built with the JDK source and target options set to JDK 1.3 and, except for | 
|  | those implementations, can be used with JDK 1.3 (see IO IO-127). | 
|  |  | 
|  | Deprecations from 1.3.2 | 
|  | ----------------------- | 
|  | - FileCleaner deprecated in favour of FileCleaningTracker [see IO-116] | 
|  |  | 
|  | Bug fixes from 1.3.2 | 
|  | -------------------- | 
|  | - FileUtils | 
|  | - forceDelete of orphaned Softlinks does not work [IO-147] | 
|  | - Infinite loop on FileUtils.copyDirectory when the destination directory is within | 
|  | the source directory [IO-141] | 
|  | - Add a copyDirectory() method that makes use of FileFilter [IO-105] | 
|  | - Add moveDirectory() and moveFile() methods [IO-77] | 
|  |  | 
|  | - HexDump | 
|  | - HexDump's use of static StringBuffers isn't thread-safe [IO-136] | 
|  |  | 
|  | Enhancements from 1.3.2 | 
|  | ----------------------- | 
|  | - FileUtils | 
|  | - Add a deleteQuietly method [IO-135] | 
|  |  | 
|  | - FilenameUtils | 
|  | - Add file name extension separator constants[IO-149] | 
|  |  | 
|  | - IOExceptionWithCause [IO-148] | 
|  | - Add a new IOException implementation with constructors which take a cause | 
|  |  | 
|  | - TeeInputStream [IO-129] | 
|  | - Add new Tee input stream implementation | 
|  |  | 
|  | - FileWriterWithEncoding [IO-153] | 
|  | - Add new File Writer implementation that accepts an encoding | 
|  |  | 
|  | - CharSequenceReader [IO-138] | 
|  | - Add new Reader implementation that handles any CharSequence (String, | 
|  | StringBuffer, StringBuilder or CharBuffer) | 
|  |  | 
|  | - ThesholdingOuputStream [IO-121] | 
|  | - Add a reset() method which sets the count of the bytes written back to zero. | 
|  |  | 
|  | - DeferredFileOutputStream [IO-130] | 
|  | - Add support for temporary files | 
|  |  | 
|  | - ByteArrayOutputStream | 
|  | - Add a new write(InputStream) method [IO-152] | 
|  |  | 
|  | - New Closed Input/Output stream implementations [IO-122] | 
|  | - AutoCloseInputStream - automatically closes and discards the underlying input stream | 
|  | - ClosedInputStream - returns -1 for any read attempts | 
|  | - ClosedOutputStream - throws an IOException for any write attempts | 
|  | - CloseShieldInputStream - prevents the underlying input stream from being closed. | 
|  | - CloseShieldOutputStream - prevents the underlying output stream from being closed. | 
|  |  | 
|  | - Add Singleton Constants to several stream classes [IO-143] | 
|  |  | 
|  | - PrefixFileFilter [IO-126] | 
|  | - Add faciltiy to specify case sensitivity on prefix matching | 
|  |  | 
|  | - SuffixFileFilter [IO-126] | 
|  | - Add faciltiy to specify case sensitivity on suffix matching | 
|  |  | 
|  | - RegexFileFilter [IO-74] | 
|  | - Add new regular expression file filter implementation | 
|  |  | 
|  | - Make IOFileFilter implementations Serializable [IO-131] | 
|  |  | 
|  | - Improve IOFileFilter toString() methods [IO-120] | 
|  |  | 
|  | - Make fields final so classes are immutable/threadsafe [IO-133] | 
|  | - changes to Age, Delegate, Name, Not, Prefix, Regex, Size, Suffix and Wildcard IOFileFilter | 
|  | implementations. | 
|  |  | 
|  | - IOCase | 
|  | - Add a compare method to IOCase [IO-144] | 
|  |  | 
|  | - Add a package of java.util.Comparator implementations for files [IO-145] | 
|  | - DefaultFileComparator - compare files using the default File.compareTo(File) method. | 
|  | - ExtensionFileComparator - compares files using file name extensions. | 
|  | - LastModifiedFileComparator - compares files using the last modified date/time. | 
|  | - NameFileComparator - compares files using file names. | 
|  | - PathFileComparator - compares files using file paths. | 
|  | - SizeFileComparator - compares files using file sizes. | 
|  |  | 
|  | ============================================================================== | 
|  | Apache Commons IO Version 1.3.2 | 
|  | ============================================================================== | 
|  |  | 
|  | Compatibility with 1.3.1 | 
|  | ---------------------- | 
|  | Binary compatible - Yes | 
|  |  | 
|  | Source compatible - Yes | 
|  |  | 
|  | Semantic compatible - Yes | 
|  |  | 
|  | Compatibility with 1.3 | 
|  | ---------------------- | 
|  | Binary compatible - No | 
|  | See [IO-113] | 
|  |  | 
|  | Source compatible - No | 
|  | See [IO-113] | 
|  |  | 
|  | Semantic compatible - Yes | 
|  |  | 
|  | Enhancements since 1.3.1 | 
|  | ------------------------ | 
|  |  | 
|  | - Created the FileCleaningTracker, basically a non-static version of the | 
|  | FileCleaner, which can be controlled by the user. [IO-116] | 
|  | - The FileCleaner is deprecated. | 
|  |  | 
|  | Bug fixes from 1.3.1 | 
|  | -------------------- | 
|  |  | 
|  | - Some tests, which are implicitly assuming a Unix-like file system, are | 
|  | now skipped on Windows. [IO-115] | 
|  | - EndianUtils | 
|  | - Both readSwappedUnsignedInteger(...) methods could return negative | 
|  | numbers due to int/long casting. [IO-117] | 
|  |  | 
|  | Bug fixes from 1.3 | 
|  | ------------------ | 
|  |  | 
|  | - FileUtils | 
|  | - NPE in openOutputStream(File) when file has no parent in path [IO-112] | 
|  | - readFileToString(File) is not static [IO-113] | 
|  |  | 
|  | ============================================================================== | 
|  | Apache Commons IO Version 1.3.1 | 
|  | ============================================================================== | 
|  |  | 
|  | Compatibility with 1.3 | 
|  | ---------------------- | 
|  | Binary compatible - No | 
|  | See [IO-113] | 
|  |  | 
|  | Source compatible - No | 
|  | See [IO-113] | 
|  |  | 
|  | Semantic compatible - Yes | 
|  |  | 
|  | Bug fixes from 1.3 | 
|  | ------------------ | 
|  |  | 
|  | - FileUtils | 
|  | - NPE in openOutputStream(File) when file has no parent in path [IO-112] | 
|  | - readFileToString(File) is not static [IO-113] | 
|  |  | 
|  | ============================================================================== | 
|  | Apache Commons IO Version 1.3 | 
|  | ============================================================================== | 
|  |  | 
|  | Compatibility with 1.2 | 
|  | ---------------------- | 
|  | Binary compatible - Yes | 
|  |  | 
|  | Source compatible - Yes | 
|  |  | 
|  | Semantic compatible - Yes | 
|  | Check the bug fixes section for semantic bug fixes | 
|  |  | 
|  | Deprecations from 1.2 | 
|  | --------------------- | 
|  | - WildcardFilter deprecated, replaced by WildcardFileFilter | 
|  | - old class only accepted files, thus had a confusing dual purpose | 
|  |  | 
|  | - FileSystemUtils.freeSpace deprecated, replaced by freeSpaceKb | 
|  | - freeSpace returns a result that varies by operating system and | 
|  | thus isn't that useful | 
|  | - freeSpaceKb returns much better and more consistent results | 
|  | - freeSpaceKb existed in v1.2, so this is a gentle cutover | 
|  |  | 
|  | Bug fixes from 1.2 | 
|  | ------------------ | 
|  | - LineIterator now implements Iterator | 
|  | - It was always supposed to... | 
|  |  | 
|  | - FileSystemUtils.freeSpace/freeSpaceKb [IO-83] | 
|  | - These should now work on AIX and HP-UX | 
|  |  | 
|  | - FileSystemUtils.freeSpace/freeSpaceKb [IO-90] | 
|  | - Avoid infinite looping in Windows | 
|  | - Catch more errors with nice messages | 
|  |  | 
|  | - FileSystemUtils.freeSpace [IO-91] | 
|  | - This is now documented not to work on SunOS 5 | 
|  |  | 
|  | - FileSystemUtils [IO-93] | 
|  | - Fixed resource leak leading to 'Too many open files' error | 
|  | - Previously did not destroy Process instances (as JDK Javadoc is so poor) | 
|  | - http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4801027 | 
|  |  | 
|  | - FileUtils.touch [IO-100] | 
|  | - The touch method previously gave no indication when the file could not | 
|  | be touched successfully (such as due to access restrictions) - it now | 
|  | throws an IOException if the last modified date cannot be changed | 
|  |  | 
|  | - FileCleaner | 
|  | - This now handles the situation where an error occurs when deleting the file | 
|  |  | 
|  | - IOUtils.copy [IO-84] | 
|  | - Copy methods could return inaccurate byte/char count for large streams | 
|  | - The copy(InputStream, OutputStream) method now returns -1 if the count is greater than an int | 
|  | - The copy(Reader, Writer) method now throws now returns -1 if the count is greater than an int | 
|  | - Added a new copyLarge(InputStream, OutputStream) method that returns a long | 
|  | - Added a new copyLarge(Reader, Writer) method that returns a long | 
|  |  | 
|  | - CountingInputStream/CountingOutputStream [IO-84] | 
|  | - Methods were declared as int thus the count was innacurate for large streams | 
|  | - new long based methods getByteCount()/resetByteCount() added | 
|  | - existing methods changed to throw an exception if the count is greater than an int | 
|  |  | 
|  | - FileBasedTestCase | 
|  | - Fixed bug in compare content methods identified by GNU classpath | 
|  |  | 
|  | - EndianUtils.writeSwappedLong(byte[], int) [IO-101] | 
|  | - An int overrun in the bit shifting when it should have been a long | 
|  |  | 
|  | - EndianUtils.writeSwappedLong(InputStream) [IO-102] | 
|  | - The return of input.read(byte[]) was not being checked to ensure all 8 bytes were read | 
|  |  | 
|  | Enhancements from 1.2 | 
|  | --------------------- | 
|  | - DirectoryWalker [IO-86] | 
|  | - New class designed for subclassing to walk through a set of files. | 
|  | DirectoryWalker provides the walk of the directories, filtering of | 
|  | directories and files, and cancellation support. The subclass must provide | 
|  | the specific behaviour, such as text searching or image processing. | 
|  |  | 
|  | - IOCase | 
|  | - New class/enumeration for case-sensitivity control | 
|  |  | 
|  | - FilenameUtils | 
|  | - New methods to handle case-sensitivity | 
|  | - wildcardMatch - new method that has IOCase as a parameter | 
|  | - equals - new method that has IOCase as a parameter | 
|  |  | 
|  | - FileUtils [IO-108] - new default encoding methods for: | 
|  | - readFileToString(File) | 
|  | - readLines(File) | 
|  | - lineIterator(File) | 
|  | - writeStringToFile(File, String) | 
|  | - writeLines(File, Collection) | 
|  | - writeLines(File, Collection, String) | 
|  |  | 
|  | - FileUtils.openOutputStream  [IO-107] | 
|  | - new method to open a FileOutputStream, creating parent directories if required | 
|  | - FileUtils.touch | 
|  | - FileUtils.copyURLToFile | 
|  | - FileUtils.writeStringToFile | 
|  | - FileUtils.writeByteArrayToFile | 
|  | - FileUtils.writeLines | 
|  | - enhanced to create parent directories if required | 
|  | - FileUtils.openInputStream  [IO-107] | 
|  | - new method to open a FileInputStream, providing better error messages than the JDK | 
|  |  | 
|  | - FileUtils.isFileOlder | 
|  | - new methods to check if a file is older (i.e. isFileOlder()) - counterparts | 
|  | to the existing isFileNewer() methods. | 
|  |  | 
|  | - FileUtils.checksum, FileUtils.checksumCRC32 | 
|  | - new methods to create a checksum of a file | 
|  |  | 
|  | - FileUtils.copyFileToDirectory  [IO-104] | 
|  | - new variant that optionally retains the file date | 
|  |  | 
|  | - FileDeleteStrategy | 
|  | - FileCleaner    [IO-56,IO-70] | 
|  | - FileDeleteStrategy is a strategy for handling file deletion | 
|  | - This can be used as a calback in FileCleaner | 
|  | - Together these allow FileCleaner to do a forceDelete to kill directories | 
|  |  | 
|  | - FileCleaner.exitWhenFinished [IO-99] | 
|  | - A new method that allows the internal cleaner thread to be cleanly terminated | 
|  |  | 
|  | - WildcardFileFilter | 
|  | - Replacement for WildcardFilter | 
|  | - Accepts both files and directories | 
|  | - Ability to control case-sensitivity | 
|  |  | 
|  | - NameFileFilter | 
|  | - Ability to control case-sensitivity | 
|  |  | 
|  | - FileFileFilter | 
|  | - New IOFileFilter implementation | 
|  | - Accepts files where File.isFile() is true | 
|  | - In other words it filters out directories | 
|  | - Singleton instance provided (FILE) | 
|  |  | 
|  | - CanReadFileFilter | 
|  | - New IOFileFilter implementation | 
|  | - Accepts files where File.canRead() is true | 
|  | - Singleton instances provided (CAN_READ/CANNOT_READ/READ_ONLY) | 
|  |  | 
|  | - CanWriteFileFilter | 
|  | - New IOFileFilter implementation | 
|  | - Accepts files where File.canWrite() is true | 
|  | - Singleton instances provided (CAN_WRITE/CANNOT_WRITE) | 
|  |  | 
|  | - HiddenFileFilter | 
|  | - New IOFileFilter implementation | 
|  | - Accepts files where File.isHidden() is true | 
|  | - Singleton instances provided (HIDDEN/VISIBLE) | 
|  |  | 
|  | - EmptyFileFilter | 
|  | - New IOFileFilter implementation | 
|  | - Accepts files or directories that are empty | 
|  | - Singleton instances provided (EMPTY/NOT_EMPTY) | 
|  |  | 
|  | - TrueFileFilter/FalseFileFilter/DirectoryFileFilter | 
|  | - New singleton instance constants (TRUE/FALSE/DIRECTORY) | 
|  | - The new constants are more JDK 1.5 friendly with regards to static imports | 
|  | (whereas if everything uses INSTANCE, then they just clash) | 
|  | - The old INSTANCE constants are still present and have not been deprecated | 
|  |  | 
|  | - FileFilterUtils.sizeRangeFileFilter | 
|  | - new sizeRangeFileFilter(long minimumSize, long maximumSize) method which | 
|  | creates a filter that accepts files within the specified size range. | 
|  |  | 
|  | - FileFilterUtils.makeDirectoryOnly/makeFileOnly | 
|  | - two new methods that decorate a file filter to make it apply to | 
|  | directories only or files only | 
|  |  | 
|  | - NullWriter | 
|  | - New writer that acts as a sink for all data, as per /dev/null | 
|  |  | 
|  | - NullInputStream | 
|  | - New input stream that emulates a stream of a specified size | 
|  |  | 
|  | - NullReader | 
|  | - New reader that emulates a reader of a specified size | 
|  |  | 
|  | - ByteArrayOutputStream  [IO-97] | 
|  | - Performance enhancements | 
|  |  | 
|  | ============================================================================== | 
|  | Apache Commons IO Version 1.2 | 
|  | ============================================================================== | 
|  |  | 
|  | Compatibility with 1.1 | 
|  | ---------------------- | 
|  | Binary compatible - Yes | 
|  |  | 
|  | Source compatible - Yes | 
|  |  | 
|  | Semantic compatible - Yes | 
|  |  | 
|  | Deprecations from 1.1 | 
|  | --------------------- | 
|  |  | 
|  | Bug fixes from 1.1 | 
|  | ------------------ | 
|  | - FileSystemUtils.freeSpace(drive) | 
|  | Fix to allow Windows based command to function in French locale | 
|  |  | 
|  | - FileUtils.read* | 
|  | Increase certainty that files are closed in case of error | 
|  |  | 
|  | - LockableFileWriter | 
|  | Locking mechanism was broken and only provided limited protection [38942] | 
|  | File deletion and locking in case of constructor error was broken | 
|  |  | 
|  | Enhancements from 1.1 | 
|  | --------------------- | 
|  | - AgeFileFilter/SizeFileFilter | 
|  | New file filters that compares against the age and size of the file | 
|  |  | 
|  | - FileSystemUtils.freeSpaceKb(drive) | 
|  | New method that unifies result to be in kilobytes [38574] | 
|  |  | 
|  | - FileUtils.contentEquals(File,File) | 
|  | Performance improved by adding length and file location checking | 
|  |  | 
|  | - FileUtils.iterateFiles | 
|  | Two new method to provide direct access to iterators over files | 
|  |  | 
|  | - FileUtils.lineIterator | 
|  | IOUtils.lineIterator | 
|  | New methods to provide an iterator over the lines in a file [38083] | 
|  |  | 
|  | - FileUtils.copyDirectoryToDirectory | 
|  | New method to copy a directory to within another directory [36315] | 
|  |  | 
|  | ============================================================================== | 
|  | Apache Commons IO Version 1.1 | 
|  | ============================================================================== | 
|  |  | 
|  | Incompatible changes from 1.0 | 
|  | ----------------------------- | 
|  | Binary compatible - Yes | 
|  |  | 
|  | Source compatible - Yes | 
|  |  | 
|  | Semantic compatible - Yes, except: | 
|  | - FileUtils.writeStringToFile() | 
|  | A null encoding previously used 'ISO-8859-1', now it uses the platform default | 
|  | Generally this will make no difference | 
|  |  | 
|  | - LockableFileWriter | 
|  | Improved validation and now create directories if necesssary | 
|  |  | 
|  | plus these bug fixes may affect you semantically: | 
|  | - FileUtils.touch()  (Bug fix 29821) | 
|  | Now creates the file if it did not previously exist | 
|  |  | 
|  | - FileUtils.toFile(URL) (Bug fix 32575) | 
|  | Now handles escape syntax such as %20 | 
|  |  | 
|  | - FileUtils.sizeOfDirectory()  (Bug fix 36801) | 
|  | May now return a size of 0 if the directory is security restricted | 
|  |  | 
|  | Deprecations from 1.0 | 
|  | --------------------- | 
|  | - CopyUtils has been deprecated. | 
|  | Its methods have been moved to IOUtils. | 
|  | The new IOUtils methods handle nulls better, and have clearer names. | 
|  |  | 
|  | - IOUtils.toByteArray(String) - Use {@link String#getBytes()} | 
|  | - IOUtils.toString(byte[]) - Use {@link String#String(byte[])} | 
|  | - IOUtils.toString(byte[],String) - Use {@link String#String(byte[],String)} | 
|  |  | 
|  | Bug fixes from 1.0 | 
|  | ------------------ | 
|  | - FileUtils - touch()  [29821] | 
|  | Now creates the file if it did not previously exist | 
|  |  | 
|  | - FileUtils - toFile(URL)  [32575] | 
|  | Now handles escape syntax such as %20 | 
|  |  | 
|  | - FileFilterUtils - makeCVSAware(IOFileFilter)  [33023] | 
|  | Fixed bug that caused method to be completely broken | 
|  |  | 
|  | - CountingInputStream  [33336] | 
|  | Fixed bug that caused the count to reduce by one at the end of the stream | 
|  |  | 
|  | - CountingInputStream - skip(long)  [34311] | 
|  | Bytes from calls to this method were not previously counted | 
|  |  | 
|  | - NullOutputStream  [33481] | 
|  | Remove unecessary synchronization | 
|  |  | 
|  | - AbstractFileFilter - accept(File, String)  [30992] | 
|  | Fixed broken implementation | 
|  |  | 
|  | - FileUtils  [36801] | 
|  | Previously threw NPE when listing files in a security restricted directory | 
|  | Now throw IOException with a better message | 
|  |  | 
|  | - FileUtils - writeStringToFile() | 
|  | Null encoding now correctly uses the platform default | 
|  |  | 
|  | Enhancements from 1.0 | 
|  | --------------------- | 
|  | - FilenameUtils - new class  [33303,29351] | 
|  | A static utility class for working with filenames | 
|  | Seeks to ease the pain of developing on Windows and deploying on Unix | 
|  |  | 
|  | - FileSystemUtils - new class  [32982,36325] | 
|  | A static utility class for working with file systems | 
|  | Provides one method at present, to get the free space on the filing system | 
|  |  | 
|  | - IOUtils - new public constants | 
|  | Constants for directory and line separators on Windows and Unix | 
|  |  | 
|  | - IOUtils - toByteArray(Reader,encoding) | 
|  | Handles encodings when reading to a byte array | 
|  |  | 
|  | - IOUtils - toCharArray(InputStream)  [28979] | 
|  | - toCharArray(InputStream,encoding) | 
|  | - toCharArray(Reader) | 
|  | Reads a stream/reader into a charatcter array | 
|  |  | 
|  | - IOUtils - readLines(InputStream)  [36214] | 
|  | - readLines(InputStream,encoding) | 
|  | - readLines(Reader) | 
|  | Reads a stream/reader line by line into a List of Strings | 
|  |  | 
|  | - IOUtils - toInputStream(String)  [32958] | 
|  | - toInputStream(String,encoding) | 
|  | Creates an input stream that uses the string as a source of data | 
|  |  | 
|  | - IOUtils - writeLines(Collection,lineEnding,OutputStream)  [36214] | 
|  | - writeLines(Collection,lineEnding,OutputStream,encoding) | 
|  | - writeLines(Collection,lineEnding,Writer) | 
|  | Writes a collection to a stream/writer line by line | 
|  |  | 
|  | - IOUtils - write(...) | 
|  | Write data to a stream/writer (moved from CopyUtils with better null handling) | 
|  |  | 
|  | - IOUtils - copy(...) | 
|  | Copy data between streams (moved from CopyUtils with better null handling) | 
|  |  | 
|  | - IOUtils - contentEquals(Reader,Reader) | 
|  | Method to compare the contents of two readers | 
|  |  | 
|  | - FileUtils - toFiles(URL[]) | 
|  | Converts an array of URLs to an array of Files | 
|  |  | 
|  | - FileUtils - copyDirectory()  [32944] | 
|  | New methods to copy a directory | 
|  |  | 
|  | - FileUtils - readFileToByteArray(File) | 
|  | Reads an entire file into a byte array | 
|  |  | 
|  | - FileUtils - writeByteArrayToFile(File,byte[]) | 
|  | Writes a byte array to a file | 
|  |  | 
|  | - FileUtils - readLines(File,encoding)  [36214] | 
|  | Reads a file line by line into a List of Strings | 
|  |  | 
|  | - FileUtils - writeLines(File,encoding,List) | 
|  | writeLines(File,encoding,List,lineEnding) | 
|  | Writes a collection to a file line by line | 
|  |  | 
|  | - FileUtils - EMPTY_FILE_ARRAY | 
|  | Constant for an empty array of File objects | 
|  |  | 
|  | - ConditionalFileFilter - new interface  [30705] | 
|  | Defines the behaviour of list based filters | 
|  |  | 
|  | - AndFileFilter, OrFileFilter  [30705] | 
|  | Now support a list of filters to and/or | 
|  |  | 
|  | - WildcardFilter  [31115] | 
|  | New filter that can match using wildcard file names | 
|  |  | 
|  | - FileFilterUtils - makeSVNAware(IOFileFilter) | 
|  | New method, like makeCVSAware, that ignores Subversion source control directories | 
|  |  | 
|  | - ClassLoaderObjectInputStream | 
|  | An ObjectInputStream that supports a ClassLoader | 
|  |  | 
|  | - CountingInputStream,CountingOutputStream - resetCount()  [28976] | 
|  | Adds the ability to reset the count part way through reading/writing the stream | 
|  |  | 
|  | - DeferredFileOutputStream - writeTo(OutputStream)  [34173] | 
|  | New method to allow current contents to be written to a stream | 
|  |  | 
|  | - DeferredFileOutputStream  [34142] | 
|  | Performance optimizations avoiding double buffering | 
|  |  | 
|  | - LockableFileWriter - encoding support [36825] | 
|  | Add support for character encodings to LockableFileWriter | 
|  | Improve the validation | 
|  | Create directories if necesssary | 
|  |  | 
|  | - IOUtils and EndianUtils are no longer final  [28978] | 
|  | Allows developers to have subclasses if desired | 
|  |  | 
|  | ============================================================================== | 
|  | Feedback | 
|  | ============================================================================== | 
|  |  | 
|  | Open source works best when you give feedback: | 
|  | http://commons.apache.org/io/ | 
|  |  | 
|  | Please direct all bug reports to JIRA | 
|  | http://issues.apache.org/jira/browse/IO | 
|  |  | 
|  | Or subscribe to the commons-user mailing list (prefix emails by [io]) | 
|  | http://commons.apache.org/mail-lists.html | 
|  |  | 
|  | The Commons-IO Team |