|  | <?xml version="1.0"?> | 
|  | <!-- | 
|  | 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. | 
|  | --> | 
|  |  | 
|  | <!-- | 
|  | This file is used by the maven-changes-plugin to generate the release notes. | 
|  | Useful ways of finding items to add to this file are: | 
|  |  | 
|  | 1.  Add items when you fix a bug or add a feature (this makes the | 
|  | release process easy :-). | 
|  |  | 
|  | 2.  Do a Jira search for tickets closed since the previous release. | 
|  |  | 
|  | 3.  Use the report generated by the maven-changelog-plugin to see all | 
|  | CVS commits.  Set the project.properties' maven.changelog.range | 
|  | property to the number of days since the last release. | 
|  |  | 
|  |  | 
|  | To generate the release notes from this file: | 
|  |  | 
|  | mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn] | 
|  |  | 
|  | then tweak the source formatting if necessary and regenerate, then commit | 
|  |  | 
|  | The <action> type attribute can be add,update,fix,remove. | 
|  | --> | 
|  |  | 
|  | <document> | 
|  | <properties> | 
|  | <title>Apache Commons IO Release Notes</title> | 
|  | </properties> | 
|  |  | 
|  | <body> | 
|  | <!-- The release date is the date RC is cut --> | 
|  | <release version="2.8" date="2020-MM-DD" description="Java 8 required."> | 
|  | <action dev="ggregory" type="add" due-to="Gary Gregory"> | 
|  | Add org.apache.commons.io.input.CircularInputStream. | 
|  | </action> | 
|  | <action dev="ggregory" type="add" due-to="Gary Gregory"> | 
|  | Add org.apache.commons.io.file.PathUtils.cleanDirectory(Path, FileVisitOption...). | 
|  | </action> | 
|  | <action dev="ggregory" type="add" due-to="Gary Gregory"> | 
|  | Add org.apache.commons.io.file.PathUtils.deleteDirectory(Path, FileVisitOption...). | 
|  | </action> | 
|  | <action dev="ggregory" type="fix" due-to="Rob Spoor, Jochen Wiedmann"> | 
|  | CharSequenceReader.skip should return 0 instead of EOF on stream end #123. | 
|  | </action> | 
|  | <action dev="ggregory" type="fix" due-to="Rob Spoor"> | 
|  | Implement CharSequenceReader.ready #122. | 
|  | </action> | 
|  | <action issue="IO-669" dev="ggregory" type="fix" due-to="XenoAmess, Gary Gregory"> | 
|  | Fix code smells; fix typos #115. | 
|  | </action> | 
|  | <action dev="ggregory" type="fix" due-to="Jerome Wolff, Gary Gregory"> | 
|  | Add caching for required charsets #120. | 
|  | </action> | 
|  | <action issue="IO-673" type="fix" dev="ggregory" due-to="Jerome Wolff"> | 
|  | Make some simplifications #121. | 
|  | </action> | 
|  | <action issue="IO-674" dev="ggregory" type="fix" due-to="Gary Gregory"> | 
|  | InfiniteCircularInputStream is not infinite if its input buffer contains -1. | 
|  | </action> | 
|  | <action issue="IO-675" dev="ggregory" type="fix" due-to="Gary Gregory"> | 
|  | InfiniteCircularInputStream throws a divide-by-zero exception when reading if its input buffer is size 0. | 
|  | </action> | 
|  | <action dev="ggregory" type="fix" due-to="Gary Gregory"> | 
|  | maven-checkstyle-plugin 3.1.0 -> 3.1.1. | 
|  | </action> | 
|  | <action dev="ggregory" type="fix" due-to="Gary Gregory"> | 
|  | Replace FindBugs with SpotBugs. | 
|  | </action> | 
|  | <action dev="ggregory" type="fix" due-to="Gary Gregory"> | 
|  | Fix SpotBugs issues in org.apache.commons.io.FileUtils. | 
|  | </action> | 
|  | </release> | 
|  | <!-- The release date is the date RC is cut --> | 
|  | <release version="2.7" date="2020-05-24" description="Java 8 required."> | 
|  | <action issue="IO-589" dev="sebb" type="fix"> | 
|  | Some tests fail if the base path contains a space. | 
|  | </action> | 
|  | <action dev="jochen" type="add"> | 
|  | Adding the CircularBufferInputStream, and the PeekableInputStream. | 
|  | </action> | 
|  | <action issue="IO-582" dev="jochen" type="fix" due-to="Bruno Palos"> | 
|  | Make methods in ObservableInputStream.Obsever public. | 
|  | </action> | 
|  | <action issue="IO-535" dev="pschumacher" type="fix" due-to="Svetlin Zarev, Anthony Raymond"> | 
|  | Thread bug in FileAlterationMonitor#stop(int). | 
|  | </action> | 
|  | <action issue="IO-553" dev="ggregory" type="add"> | 
|  | Add org.apache.commons.io.FilenameUtils.isIllegalWindowsFileName(char). | 
|  | </action> | 
|  | <action issue="IO-557" dev="pschumacher" type="fix" due-to="luccioman"> | 
|  | Perform locale independent upper case conversions. | 
|  | </action> | 
|  | <action issue="IO-570" dev="ggregory" type="fix" due-to="Pranet Verma"> | 
|  | Missing Javadoc in FilenameUtils causing Travis-CI build to fail. | 
|  | </action> | 
|  | <action issue="IO-571" dev="ggregory" type="fix" due-to="pranet"> | 
|  | Remove redundant isDirectory() check in org.apache.commons.io.FileUtils.listFilesAndDirs(File, IOFileFilter, IOFileFilter). | 
|  | </action> | 
|  | <action issue="IO-572" dev="ggregory" type="update" due-to="Pranet Verma"> | 
|  | Refactor duplicate code in org.apache.commons.io.FileUtils. | 
|  | </action> | 
|  | <action issue="IO-577" dev="ggregory" type="add" due-to="Gary Gregory"> | 
|  | Add readers to filter out given characters: CharacterSetFilterReader and CharacterFilterReader. | 
|  | </action> | 
|  | <action issue="IO-559" type="fix"> | 
|  | FilenameUtils.normalize now verifies hostname syntax in UNC path. | 
|  | </action> | 
|  | <action issue="IO-580" dev="ggregory" type="update"> | 
|  | Update org.apache.commons.io.FilenameUtils.isExtension(String, String[]) to use var args. | 
|  | </action> | 
|  | <action issue="IO-554" dev="ggregory" type="fix" due-to="Michele Mariotti"> | 
|  | FileUtils.copyToFile(InputStream source, File destination) should not close input stream. | 
|  | </action> | 
|  | <action issue="IO-594" dev="ggregory" type="add" due-to="Gary Gregory"> | 
|  | Add IOUtils copy methods with java.lang.Appendable as the target. | 
|  | </action> | 
|  | <action issue="IO-604" dev="ggregory" type="fix" due-to="Gary Gregory"> | 
|  | FileUtils.doCopyFile(File, File, boolean) can throw ClosedByInterruptException. | 
|  | </action> | 
|  | <action issue="IO-605" dev="ggregory" type="add" due-to="Gary Gregory"> | 
|  | Add class CanExecuteFileFilter. | 
|  | </action> | 
|  | <action issue="IO-701" dev="ggregory" type="update" due-to="Raymond Tan"> | 
|  | Make array declaration in ThresholdingOutputStream consistent with other array declarations in the library #77. | 
|  | </action> | 
|  | <action issue="IO-578" dev="ggregory" type="add" due-to="Mark Chesney"> | 
|  | Support java.nio.Path and non-default file systems for ReversedLinesFileReader (#62). | 
|  | </action> | 
|  | <action issue="IO-608" dev="ggregory" type="add" due-to="Gary Gregory"> | 
|  | Add a convenience NullPrintStream. | 
|  | </action> | 
|  | <action issue="IO-607" dev="ggregory" type="update" due-to="Gary Gregory"> | 
|  | Update from Java 7 to Java 8. | 
|  | </action> | 
|  | <action issue="IO-610" dev="ggregory" type="update" due-to="Sebastian"> | 
|  | Remove throws IOException in method isSymlink() #80. | 
|  | </action> | 
|  | <action issue="IO-612" dev="ggregory" type="add" due-to="Rob Spoor, Gary Gregory"> | 
|  | Add class TeeReader. | 
|  | </action> | 
|  | <action issue="IO-613" dev="ggregory" type="add" due-to="Rob Spoor, Gary Gregory"> | 
|  | Add classes ClosedReader and CloseShieldReader. #84. | 
|  | </action> | 
|  | <action issue="IO-614" dev="ggregory" type="add" due-to="Rob Spoor"> | 
|  | Add classes TaggedWriter, ClosedWriter and BrokenWriter. #86. | 
|  | </action> | 
|  | <action issue="IO-615" dev="ggregory" type="add" due-to="Gary Gregory, Rob Spoor"> | 
|  | Add classes TeeWriter, FilterCollectionWriter, ProxyCollectionWriter, IOExceptionList, IOIndexedException. | 
|  | </action> | 
|  | <action issue="IO-616" dev="ggregory" type="add" due-to="Rob Spoor"> | 
|  | Add class AppendableWriter. #87. | 
|  | </action> | 
|  | <action issue="IO-617" dev="ggregory" type="add" due-to="Rob Spoor, Gary Gregory"> | 
|  | Add class CloseShieldWriter. #83. | 
|  | </action> | 
|  | <action issue="IO-618" dev="ggregory" type="add" due-to="Rob Spoor"> | 
|  | Add classes Added TaggedReader, ClosedReader and BrokenReader. #85. | 
|  | </action> | 
|  | <action issue="IO-619" dev="ggregory" type="add" due-to="Rob Spoor"> | 
|  | Support sub sequences in CharSequenceReader. #91. | 
|  | </action> | 
|  | <action issue="IO-625" dev="ggregory" type="fix" due-to="Mikko Maunu"> | 
|  | Corrected misleading exception message for FileUtils.copyDirectoryToDirectory. | 
|  | </action> | 
|  | <action issue="IO-626" dev="ggregory" type="fix" due-to="Yuji Konishi"> | 
|  | A mistake in the FilenameUtils.concat()'s Javadoc about an absolute path. | 
|  | </action> | 
|  | <action issue="IO-628" dev="ggregory" type="update" due-to="Allon Mureinik"> | 
|  | Migration to JUnit Jupiter #97. | 
|  | </action> | 
|  | <action issue="IO-630" dev="ggregory" type="update" due-to="Gary Gregory"> | 
|  | Deprecate org.apache.commons.io.output.NullOutputStream.NullOutputStream() in favor of org.apache.commons.io.output.NullOutputStream.NULL_OUTPUT_STREAM. | 
|  | </action> | 
|  | <action issue="IO-631" dev="ggregory" type="add" due-to="Gary Gregory"> | 
|  | Add a CountingFileVisitor (as the basis for a forthcoming DeletingFileVisitor). | 
|  | </action> | 
|  | <action issue="IO-632" dev="ggregory" type="add" due-to="Gary Gregory"> | 
|  | Add PathUtils for operations on NIO Path. | 
|  | </action> | 
|  | <action issue="IO-633" dev="ggregory" type="add" due-to="Gary Gregory"> | 
|  | Add DeletingFileVisitor. | 
|  | </action> | 
|  | <action issue="IO-629" dev="ggregory" type="update" due-to="Ian Springer, Ian Springer, Gary Gregory"> | 
|  | FileUtils#forceDelete should use Files#delete rather than File#delete so exception messages includes reason for failure. | 
|  | </action> | 
|  | <action issue="IO-634" dev="ggregory" type="update" due-to="Václav Haisman, Bruno P. Kinoshita, Gary Gregory"> | 
|  | Make getCause synchronized and use a Deque instead of a Stack #64. | 
|  | </action> | 
|  | <action issue="IO-635" dev="ggregory" type="add" due-to="Gary Gregory"> | 
|  | Add org.apache.commons.io.IOUtils.close(Closeable). | 
|  | </action> | 
|  | <action issue="IO-636" dev="ggregory" type="add" due-to="Gary Gregory"> | 
|  | Add and reuse org.apache.commons.io.IOUtils.closeQuitely(Closeable, Consumer<IOException>). | 
|  | Add and reuse org.apache.commons.io.IOUtils.close(Closeable, IOConsumer<IOException>). | 
|  | </action> | 
|  | <action issue="IO-640" dev="ggregory" type="fix" due-to="Gary Gregory"> | 
|  | NPE in org.apache.commons.io.IOUtils.contentEquals(InputStream, InputStream) when only one input is null. | 
|  | </action> | 
|  | <action issue="IO-641" dev="ggregory" type="fix" due-to="Gary Gregory"> | 
|  | NPE in org.apache.commons.io.IOUtils.contentEquals(Reader, Reader) when only one input is null. | 
|  | </action> | 
|  | <action issue="IO-643" dev="ggregory" type="fix" due-to="Gary Gregory"> | 
|  | NPE in org.apache.commons.io.IOUtils.contentEqualsIgnoreEOL(Reader, Reader) when only one input is null. | 
|  | </action> | 
|  | <action issue="IO-644" dev="ggregory" type="fix" due-to="Gary Gregory"> | 
|  | NPE in org.apache.commons.io.FileUtils.contentEqualsIgnoreEOL(File, File) when only one input is null. | 
|  | </action> | 
|  | <action issue="IO-645" dev="ggregory" type="add" due-to="Gary Gregory"> | 
|  | Add org.apache.commons.io.file.PathUtils.fileContentEquals(Path, Path, OpenOption...). | 
|  | </action> | 
|  | <action issue="IO-458" dev="ggregory" type="add" due-to="Gary Gregory, Joshua Gitlin"> | 
|  | Add a SequenceReader similar to java.io.SequenceInputStream. | 
|  | </action> | 
|  | <action issue="IO-648" dev="ggregory" type="add" due-to="Gary Gregory"> | 
|  | Implement directory content equality. 100#. | 
|  | </action> | 
|  | <action type="update" dev="ggregory" due-to="Gary Gregory"> | 
|  | Update tests from Apache Commons Lang 3.9 to 3.10. | 
|  | </action> | 
|  | <action type="update" dev="ggregory" due-to="Gary Gregory"> | 
|  | Update tests org.junit-pioneer:junit-pioneer 0.3.0 -> 0.6.0. | 
|  | </action> | 
|  | <action type="update" dev="ggregory" due-to="Gary Gregory"> | 
|  | Update tests org.junit.jupiter:junit-jupiter 5.5.2 -> 5.6.2. | 
|  | </action> | 
|  | <action type="update" dev="ggregory" due-to="Gary Gregory"> | 
|  | Update tests org.mockito:mockito-core 3.0.0 -> 3.3.3. | 
|  | </action> | 
|  | <action issue="IO-648" dev="ggregory" type="add" due-to="Adam Retter, Alex Herbert, Gary Gregory"> | 
|  | Refactor ByteArrayOutputStream into synchronized and unsynchronized versions #108. | 
|  | </action> | 
|  | <action issue="IO-662" dev="ggregory" type="add" due-to="Adam Retter, Gary Gregory"> | 
|  | Refactor ByteArrayOutputStream into synchronized and unsynchronized versions #108. | 
|  | </action> | 
|  | <action issue="IO-664" dev="ggregory" type="fix" due-to="Gary Gregory"> | 
|  | org.apache.commons.io.FileUtils.copyURLToFile(*) open but do not close streams. | 
|  | </action> | 
|  | <action issue="IO-666" dev="ggregory" type="update" due-to="Gary Gregory"> | 
|  | Normalize internal buffers to 8192 bytes. | 
|  | </action> | 
|  | <action issue="IO-665" dev="ggregory" type="update" due-to="Otto Fowler, Gary Gregory"> | 
|  | Ensure that passing a null InputStream results in NPE with tests #112. | 
|  | </action> | 
|  | <action type="update" dev="ggregory" due-to="Gary Gregory"> | 
|  | commons.jacoco.version 0.8.4 -> 0.8.5. | 
|  | </action> | 
|  | <action type="update" dev="ggregory" due-to="Gary Gregory"> | 
|  | com.github.siom79.japicmp:japicmp-maven-plugin 0.14.1 -> 0.14.3. | 
|  | </action> | 
|  | <action issue="IO-667" dev="ggregory" type="update" due-to="Adam Retter, Gary Gregory"> | 
|  | Add functional interfaces IOFunction and IOSupplier #110. | 
|  | </action> | 
|  | <action dev="ggregory" type="update" due-to="Rob Spoor, Gary Gregory"> | 
|  | Support sub sequences in CharSequenceReader #91. | 
|  | </action> | 
|  | <action dev="ggregory" type="update" due-to="dengliming"> | 
|  | Remove deprecated sudo setting. #113. | 
|  | </action> | 
|  | </release> | 
|  |  | 
|  | <release version="2.6" date="2017-10-15" description="Java 7 required, Java 9 supported."> | 
|  | <action issue="IO-553" dev="britter" type="update" due-to="Michael Ernst"> | 
|  | Make code style of hasBOM() consistent with getBOMCharsetName() | 
|  | </action> | 
|  | <action issue="IO-546" dev="pschumacher" type="fix" due-to="Tomas Celaya"> | 
|  | ClosedOutputStream#flush should throw | 
|  | </action> | 
|  | <action issue="IO-551" dev="britter" type="add"> | 
|  | Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility | 
|  | </action> | 
|  | <action issue="IO-550" dev="kinow" type="fix" due-to="Jimi Adrian"> | 
|  | Documentation issue, fix 404 Javadoc issues in the description page | 
|  | </action> | 
|  | <action issue="IO-542" dev="pschumacher" type="update" due-to="Ilmars Poikans"> | 
|  | FileUtils#readFileToByteArray: optimize reading of files with known size | 
|  | </action> | 
|  | <action issue="IO-547" dev="ggregory" type="update" due-to="Nikhil Shinde, Michael Ernst, Gary Greory"> | 
|  | Throw a IllegalArgumentException instead of NullPointerException in FileSystemUtils.freeSpaceWindows(). | 
|  | </action> | 
|  | <action issue="IO-367" dev="pschumacher" type="add" due-to="James Sawle"> | 
|  | Add convenience methods for copyToDirectory | 
|  | </action> | 
|  | <action issue="IO-442" dev="pschumacher" type="fix" due-to="Simon Robinson"> | 
|  | Javadoc contradictory for FileFilterUtils.ageFileFilter(cutoff) and the filter it constructs: AgeFileFilter(cutoff) | 
|  | </action> | 
|  | <action issue="IO-534" dev="sebb" type="fix"> | 
|  | FileUtilTestCase.testForceDeleteDir() should not delete testDirectory parent | 
|  | </action> | 
|  | <action issue="IO-528" dev="pschumacher" type="fix" due-to="Dave Moten"> | 
|  | fix Tailer.run race condition runaway logging | 
|  | </action> | 
|  | <action issue="IO-483" dev="kinow" type="fix" due-to="Marko Vasic"> | 
|  | getPrefixLength return -1 if unix file contains colon | 
|  | </action> | 
|  | <action issue="IO-520" dev="pschumacher" type="fix"> | 
|  | FileUtilsTestCase#testContentEqualsIgnoreEOL fails on Windows | 
|  | </action> | 
|  | <action issue="IO-516" dev="pschumacher" type="fix" due-to="Jason Pyeron"> | 
|  | .gitattributes not correctly applied | 
|  | </action> | 
|  | <action issue="IO-515" dev="ggregory" type="fix" due-to="Brett Lounsbury, Gary Gregory"> | 
|  | Allow Specifying Initial Buffer Size of DeferredFileOutputStream. | 
|  | </action> | 
|  | <action issue="IO-512" dev="ggregory" type="fix" due-to="Ralf Hauser"> | 
|  | ThresholdingOutputStream.thresholdReached() results in FileNotFoundException. | 
|  | </action> | 
|  | <action issue="IO-511" dev="britter" type="fix" due-to="Ahmet Celik"> | 
|  | After a few unit tests, a few newly created directories not cleaned completely. | 
|  | </action> | 
|  | <action issue="IO-502" dev="ggregory" type="fix" due-to="Christian Schulte"> | 
|  | Exceptions are suppressed incorrectly when copying files. | 
|  | </action> | 
|  | <action issue="IO-503" dev="ggregory" type="fix"> | 
|  | Update platform requirement to Java 7. | 
|  | </action> | 
|  | <action issue="IO-537" dev="ggregory" type="fix" due-to="Borys Zibrov"> | 
|  | BOMInputStream shouldn't sort array of BOMs in-place. | 
|  | </action> | 
|  | <action issue="IO-506" dev="ggregory" type="update" due-to="Christian Schulte"> | 
|  | Deprecate methods FileSystemUtils.freeSpaceKb(). | 
|  | </action> | 
|  | <action issue="IO-505" dev="ggregory" type="update" due-to="Christian Schulte"> | 
|  | Make LineIterator implement Closeable to support try-with-resources statements. | 
|  | </action> | 
|  | <action issue="IO-504" dev="ggregory" type="update" due-to="Christian Schulte"> | 
|  | Deprecated of all IOUtils.closeQuietly() methods and use try-with-resources internally. | 
|  | </action> | 
|  | <action issue="IO-493" dev="pschumacher" type="add" due-to="Piotr Turski"> | 
|  | Add infinite circular input stream | 
|  | </action> | 
|  | <action issue="IO-507" dev="ggregory" type="add"> | 
|  | Add a ByteOrderParser class. | 
|  | </action> | 
|  | <action issue="IO-518" dev="jochen" type="add"> | 
|  | Add ObservableInputStream | 
|  | </action> | 
|  | <action issue="IO-519" dev="jochen" type="add"> | 
|  | Add MessageDigestCalculatingInputStream | 
|  | </action> | 
|  | <action issue="IO-513" dev="ggregory" type="add" due-to="Behrang Saeedzadeh"> | 
|  | Add convenience methods for reading class path resources. | 
|  | </action> | 
|  | <action issue="IO-514" dev="pschumacher" type="remove"> | 
|  | Remove org.apache.commons.io.Java7Support | 
|  | </action> | 
|  | <action issue="IO-567" dev="jochen" type="fix"> | 
|  | Implement special case handling for NTFS ADS names: FilenameUtils.getExtension(String), | 
|  | and FilenameUtils.indexOfExtension(String) are now throwing an IllegalArgumentException, | 
|  | if the file name in question appears to identify an alternate data stream (Windows only). | 
|  | </action> | 
|  | </release> | 
|  |  | 
|  | <release version="2.5" date="2016-04-22" description="New features and bug fixes."> | 
|  | <action issue="IO-492" dev="ggregory" type="fix" due-to="Santiago Castro"> | 
|  | Typo: In an IOUtils.java comment it says "focussed" instead of "focused". | 
|  | </action> | 
|  | <action issue="IO-433" dev="krosenvold" type="update"> | 
|  | Converted all test cases to JUnit 4 | 
|  | </action> | 
|  | <action issue="IO-487" dev="bdelacretaz" type="add"> | 
|  | Add ValidatingObjectInputStream for controlled deserialization | 
|  | </action> | 
|  | <action issue="IO-446" dev="krosenvold" type="fix" due-to="Jeffrey Barrus"> | 
|  | adds an endOfFileReached method to the TailerListener | 
|  | </action> | 
|  | <action issue="IO-484" dev="krosenvold" type="fix" due-to="Philippe Arteau"> | 
|  | FilenameUtils should handle embedded null bytes | 
|  | </action> | 
|  | <action issue="IO-481" dev="krosenvold" type="fix"> | 
|  | Changed/Corrected algorithm for waitFor | 
|  | </action> | 
|  | <action issue="IO-471" dev="krosenvold" type="add" due-to="Leandro Reis"> | 
|  | Support for additional encodings in ReversedLinesFileReader | 
|  | </action> | 
|  | <action issue="IO-428" dev="krosenvold" type="fix" due-to="Stefan Gmeiner"> | 
|  | BOMInputStream.skip returns wrong count if stream contains no BOM | 
|  | </action> | 
|  | <action issue="IO-425" dev="krosenvold" type="add" due-to="Craig Swank"> | 
|  | Setter method for threshold on ThresholdingOutputStream | 
|  | </action> | 
|  | <action issue="IO-488" dev="krosenvold" type="fix" due-to="Björn Buchner"> | 
|  | FileUtils.waitFor(...) swallows thread interrupted status | 
|  | </action> | 
|  | <action issue="IO-452" dev="krosenvold" type="fix" due-to="David Standish"> | 
|  | Support for symlinks with missing target. Added support for JDK7 symlink features when present | 
|  | </action> | 
|  | <action issue="IO-466" dev="krosenvold" type="update"> | 
|  | Added testcase to show this was fixed with IO-423 | 
|  | </action> | 
|  | <action issue="IO-479" dev="sebb" type="update" due-to="Zhouce Chen"> | 
|  | Correct exception message in FileUtils.getFile(File, String...) | 
|  | </action> | 
|  | <action issue="IO-406" dev="britter" type="add" due-to="Niall Pemberton"> | 
|  | Introduce new class AppendableOutputStream | 
|  | </action> | 
|  | <action issue="IO-465" dev="britter" type="update" due-to="based2"> | 
|  | Update to JUnit 4.12 | 
|  | </action> | 
|  | <action issue="IO-462" dev="sebb" type="update"> | 
|  | IOExceptionWithCause no longer needed | 
|  | </action> | 
|  | <action issue="IO-459" dev="olamy" type="add" due-to="Kristian Rosenvold"> | 
|  | Add WindowsLineEndingInputStream and UnixLineEndingInputStream. | 
|  | </action> | 
|  | <action issue="IO-457" dev="olamy" type="add" due-to="Kristian Rosenvold"> | 
|  | Add a BoundedReader, a wrapper that can be used to constrain access | 
|  | to an underlying stream when used with mark/reset - | 
|  | to avoid overflowing the mark limit of the underlying buffer. | 
|  | </action> | 
|  | <action issue="IO-453" dev="sebb" type="fix" due-to="Steven Christou"> | 
|  | Regression in FileUtils.readFileToString from 2.0.1 | 
|  | </action> | 
|  | <action issue="IO-451" dev="sebb" type="fix" due-to="David Standish"> | 
|  | ant test fails - resources missing from test classpath | 
|  | </action> | 
|  | <action issue="IO-435" dev="tn" type="fix" due-to="Dominik Stadler"> | 
|  | Document that FileUtils.deleteDirectory, directoryContains and cleanDirectory | 
|  | may throw an IllegalArgumentException in case the passed directory does not | 
|  | exist or is not a directory. | 
|  | </action> | 
|  | <action issue="IO-426" dev="ggregory" type="add"> | 
|  | Add API IOUtils.closeQuietly(Closeable...) | 
|  | </action> | 
|  | <action issue="IO-424" dev="ggregory" type="fix" due-to="Ville Skyttä"> | 
|  | Javadoc fixes, mostly to appease 1.8.0 | 
|  | </action> | 
|  | <action issue="IO-422" dev="ggregory" type="update"> | 
|  | Deprecate Charsets Charset constants in favor of Java 7's java.nio.charset.StandardCharsets | 
|  | </action> | 
|  | <action issue="IO-410" dev="sebb" type="add" due-to="Beluga Behr"> | 
|  | Readfully() That Returns A Byte Array | 
|  | </action> | 
|  | <action issue="IO-395" dev="brentworden" type="add" due-to="Beluga Behr"> | 
|  | Overload IOUtils buffer methods to accept buffer size | 
|  | </action> | 
|  | <action issue="IO-389" dev="sebb" type="fix" due-to="Austin Doupnik"> | 
|  | FileUtils.sizeOfDirectory can throw IllegalArgumentException | 
|  | </action> | 
|  | <action issue="IO-390" dev="sebb" type="fix"> | 
|  | FileUtils.sizeOfDirectoryAsBigInteger can overflow. | 
|  | Ensure that recursive calls all use BigInteger | 
|  | </action> | 
|  | <action issue="IO-382" dev="sebb" type="add"> | 
|  | Chunked IO for large arrays. | 
|  | Added writeChunked(byte[], OutputStream) and writeChunked(char[] Writer) | 
|  | Added ChunkedOutputStream, ChunkedWriter | 
|  | </action> | 
|  | <action issue="IO-385" dev="sebb" type="fix"> | 
|  | FileUtils.doCopyFile can potentially loop for ever | 
|  | Exit loop if no data to copy | 
|  | </action> | 
|  | <action issue="IO-383" dev="sebb" type="fix"> | 
|  | FileUtils.doCopyFile caches the file size; needs to be documented | 
|  | Added Javadoc; show file lengths in exception message | 
|  | </action> | 
|  | <action issue="IO-239" dev="sebb" type="update"> | 
|  | Convert IOCase to a Java 1.5+ Enumeration | 
|  | [N.B. this is binary compatible] | 
|  | </action> | 
|  | <action issue="IO-233" dev="sebb" type="add"> | 
|  | Add Methods for Buffering Streams/Writers To IOUtils | 
|  | Added overloaded buffer() methods - see also IO-330 | 
|  | </action> | 
|  | <action issue="IO-330" dev="sebb" type="add"> | 
|  | IOUtils#toBufferedOutputStream/toBufferedWriter to conditionally wrap the output | 
|  | Added overloaded buffer() methods - see also IO-233 | 
|  | </action> | 
|  | <action issue="IO-381" dev="ggregory" type="add"> | 
|  | Add FileUtils.copyInputStreamToFile API with option to leave the source open. | 
|  | See copyInputStreamToFile(final InputStream source, final File destination, boolean closeSource) | 
|  | </action> | 
|  | <action issue="IO-380" dev="sebb" type="fix" due-to="claudio_ch"> | 
|  | FileUtils.copyInputStreamToFile should document it closes the input source | 
|  | </action> | 
|  | <action issue="IO-279" dev="sebb" type="fix"> | 
|  | Tailer erroneously considers file as new. | 
|  | Fix to use file.lastModified() rather than System.currentTimeMillis() | 
|  | </action> | 
|  | <action issue="IO-356" dev="sebb" type="fix"> | 
|  | CharSequenceInputStream#reset() behaves incorrectly in case when buffer size is not dividable by data size. | 
|  | Fix code so skip relates to the encoded bytes; reset now re-encodes the data up to the point of the mark | 
|  | </action> | 
|  | <action issue="IO-379" dev="sebb" type="add"> | 
|  | CharSequenceInputStream - add tests for available() | 
|  | Fix code so it really does reflect a minimum available. | 
|  | </action> | 
|  | <action issue="IO-328" dev="sebb" type="update"> | 
|  | getPrefixLength returns null if filename has leading slashes | 
|  | Javadoc: add examples to show correct behavior; add unit tests | 
|  | </action> | 
|  | <action issue="IO-299" dev="sebb" type="update"> | 
|  | FileUtils.listFilesAndDirs includes original dir in results even when it doesn't match filter | 
|  | Javadoc: clarify that original dir is included in the results | 
|  | </action> | 
|  | <action issue="IO-346" dev="sebb" type="add"> | 
|  | Add ByteArrayOutputStream.toInputStream() | 
|  | </action> | 
|  | <action issue="IO-368" dev="sebb" type="fix"> | 
|  | ClassLoaderObjectInputStream does not handle primitive typed members | 
|  | </action> | 
|  | <action issue="IO-341" dev="sebb" type="add"> | 
|  | A constant for holding the BOM character (U+FEFF) | 
|  | </action> | 
|  | <action issue="IO-314" dev="sebb" type="fix"> | 
|  | Deprecate all methods that use the default encoding | 
|  | </action> | 
|  | <action issue="IO-338" dev="sebb" type="fix"> | 
|  | When a file is rotated, finish reading previous file prior to starting new one | 
|  | </action> | 
|  | <action issue="IO-354" dev="sebb" type="fix"> | 
|  | Commons IO Tailer does not respect UTF-8 Charset. | 
|  | </action> | 
|  | <action issue="IO-323" dev="sebb" type="fix"> | 
|  | What should happen in FileUtils.sizeOf[Directory] when an overflow takes place? | 
|  | Added Javadoc. | 
|  | </action> | 
|  | <action issue="IO-372" dev="sebb" type="fix"> | 
|  | FileUtils.moveDirectory can produce misleading error message on failiure | 
|  | </action> | 
|  | <action issue="IO-375" dev="sebb" type="update"> | 
|  | FilenameUtils.splitOnTokens(String text) check for '**' could be simplified | 
|  | </action> | 
|  | <action issue="IO-374" dev="sebb" type="update"> | 
|  | WildcardFileFilter ctors should not use null to mean IOCase.SENSITIVE when delegating to other ctors | 
|  | </action> | 
|  | <action issue="IO-362" dev="ggregory" type="fix" due-to="mmadson, ggregory"> | 
|  | IOUtils.contentEquals* methods returns false if input1 == input2, should return true. | 
|  | </action> | 
|  | <action issue="IO-361" dev="ggregory" type="add"> | 
|  | Add API FileUtils.forceMkdirsParent(). | 
|  | </action> | 
|  | <action issue="IO-360" dev="ggregory" type="add"> | 
|  | Add API Charsets.requiredCharsets(). | 
|  | </action> | 
|  | <action issue="IO-359" dev="ggregory" type="add" due-to="yukoba"> | 
|  | Add IOUtils.skip and skipFully(ReadableByteChannel, long). | 
|  | </action> | 
|  | <action issue="IO-358" dev="ggregory" type="add" due-to="yukoba"> | 
|  | Add IOUtils.read and readFully(ReadableByteChannel, ByteBuffer buffer). | 
|  | </action> | 
|  | <action issue="IO-357" dev="ggregory" type="fix" due-to="mortenh"> | 
|  | [Tailer] InterruptedException while the thread is sleeping is silently ignored | 
|  | </action> | 
|  | <action issue="IO-353" dev="ggregory" type="add" due-to="ggregory"> | 
|  | Add API IOUtils.copy(InputStream, OutputStream, int) | 
|  | </action> | 
|  | <action issue="IO-349" dev="ggregory" type="add" due-to="scop"> | 
|  | Add API with array offset and length argument to FileUtils.writeByteArrayToFile. | 
|  | </action> | 
|  | <action issue="IO-352" dev="ggregory" type="fix" due-to="scop"> | 
|  | Spelling fixes. | 
|  | </action> | 
|  | <action issue="IO-348" dev="ggregory" type="add" due-to="plcstpierre"> | 
|  | Missing information in IllegalArgumentException thrown by org.apache.commons.io.FileUtils#validateListFilesParameters. | 
|  | </action> | 
|  | <action issue="IO-345" dev="ggregory" type="add" due-to="mkresse"> | 
|  | Supply a hook method allowing Tailer actively determining stop condition. | 
|  | </action> | 
|  | <action issue="IO-436" dev="ggregory" type="fix" due-to="christoph.schneegans"> | 
|  | Improper Javadoc comment for FilenameUtils.indexOfExtension. | 
|  | </action> | 
|  | <action issue="IO-437" dev="ggregory" type="add"> | 
|  | Make IOUtils.EOF public and reuse it in various classes. | 
|  | </action> | 
|  | </release> | 
|  |  | 
|  | <release version="2.4" date="2012-06-12" description="New features and bug fixes."> | 
|  | <action issue="IO-343" dev="ggregory" type="fix" due-to="igorlash"> | 
|  | org.apache.commons.io.comparator Javadoc is inconsistent with real code. | 
|  | </action> | 
|  | <action issue="IO-336" dev="ggregory" type="fix" due-to="rleavelle"> | 
|  | Yottabyte (YB) incorrectly defined in FileUtils. | 
|  | </action> | 
|  | <action issue="IO-269" dev="ggregory" type="add" due-to="sebb"> | 
|  | Tailer locks file from deletion/rename on Windows. | 
|  | </action> | 
|  | <action issue="IO-279" dev="sebb" type="fix" due-to="Sergio Bossa, Chris Baron"> | 
|  | Tailer erroneously considers file as new. | 
|  | </action> | 
|  | <action issue="IO-335" dev="sebb" type="fix"> | 
|  | Tailer#readLines - incorrect CR handling. | 
|  | </action> | 
|  | <action issue="IO-334" dev="sebb" type="fix"> | 
|  | FileUtils.toURLs throws NPE for null parameter; document the behavior. | 
|  | </action> | 
|  | <action issue="IO-333" dev="ggregory" type="add" due-to="fmeschbe"> | 
|  | Export OSGi packages at version 1.x in addition to 2.x. | 
|  | </action> | 
|  | <action issue="IO-320" dev="ggregory" type="add" due-to="ggregory"> | 
|  | Add XmlStreamReader support for UTF-32. | 
|  | </action> | 
|  | <action issue="IO-331" dev="ggregory" type="add" due-to="ggregory"> | 
|  | BOMInputStream wrongly detects UTF-32LE_BOM files as UTF-16LE_BOM files in method getBOM(). | 
|  | </action> | 
|  | <action issue="IO-332" dev="ggregory" type="fix" due-to="liangly"> | 
|  | Improve tailer's reading performance. | 
|  | </action> | 
|  | <action issue="IO-279" dev="ggregory" type="fix"> | 
|  | Improve Tailer performance with buffered reads (see IO-332). | 
|  | </action> | 
|  | <action issue="IO-329" dev="ggregory" type="fix" due-to="tivv"> | 
|  | FileUtils.writeLines uses unbuffered IO. | 
|  | </action> | 
|  | <action issue="IO-327" dev="ggregory" type="add" due-to="ggregory"> | 
|  | Add byteCountToDisplaySize(BigInteger). | 
|  | </action> | 
|  | <action issue="IO-326" dev="ggregory" type="add" due-to="ggregory, kinow"> | 
|  | Add new FileUtils.sizeOf[Directory] APIs to return BigInteger. | 
|  | </action> | 
|  | <action issue="IO-325" dev="ggregory" type="add" due-to="raviprak"> | 
|  | Add IOUtils.toByteArray methods to work with URL and URI. | 
|  | </action> | 
|  | <action issue="IO-324" dev="ggregory" type="add" due-to="raviprak"> | 
|  | Add missing Charset sister APIs to method that take a String charset name. | 
|  | </action> | 
|  | <action issue="IO-319" dev="ggregory" type="fix" due-to="raviprak"> | 
|  | FileUtils.sizeOfDirectory follows symbolic links. | 
|  | </action> | 
|  | </release> | 
|  |  | 
|  | <release version="2.3" date="2012-April-10" description="New features and bug fixes."> | 
|  | <action issue="IO-322" dev="ggregory" type="add" due-to="ggregory"> | 
|  | Add and use class Charsets. | 
|  | </action> | 
|  | <action issue="IO-321" dev="ggregory" type="add" due-to="ggregory"> | 
|  | ByteOrderMark UTF_32LE is incorrect. | 
|  | </action> | 
|  | <action issue="IO-318" dev="ggregory" type="add" due-to="ggregory"> | 
|  | Add Charset sister APIs to method that take a String charset name. | 
|  | </action> | 
|  | </release> | 
|  |  | 
|  | <release version="2.2" date="2012-March-26" description="New features and bug fixes."> | 
|  | <action issue="IO-313" dev="ggregory" type="add" due-to="ggregory"> | 
|  | Add IOUTils.toBufferedReader(Reader) | 
|  | </action> | 
|  | <!-- Note: the issue was not raised by Manoj, but arose from IO-305 and tests he performed --> | 
|  | <action issue="IO-308" dev="sebb" type="add" due-to="Manoj Mokashi"> | 
|  | Allow applications to provide buffer (or size) for copyLarge methods. | 
|  | </action> | 
|  | <action issue="IO-311" dev="sebb" type="fix" due-to="Robert Muir"> | 
|  | IOUtils.read(InputStream/Reader) ignores the offset parameter | 
|  | </action> | 
|  | <action issue="IO-312" dev="sebb" type="fix"> | 
|  | CharSequenceInputStream(CharSequence s, Charset charset, int bufferSize) ignores bufferSize | 
|  | </action> | 
|  | <action issue="IO-305" dev="sebb" type="add" due-to="Manoj Mokashi"> | 
|  | New copyLarge() method in IOUtils that takes additional offset, length arguments | 
|  | </action> | 
|  | <action issue="IO-300" dev="sebb" type="fix"> | 
|  | FileUtils.moveDirectoryToDirectory removes source directory if destination is a sub-directory | 
|  | </action> | 
|  | <action issue="IO-307" dev="sebb" type="fix"> | 
|  | ReaderInputStream#read(byte[] b, int off, int len) should check for valid parameters | 
|  | </action> | 
|  | <action issue="IO-287" dev="bayard" type="add" due-to="Ron Kuris, Gary Gregory"> | 
|  | Use terabyte (TB), petabyte (PB) and exabyte (EB) in FileUtils.byteCountToDisplaySize(long size) | 
|  | </action> | 
|  | <action issue="IO-306" dev="sebb" type="fix"> | 
|  | ReaderInputStream#read(byte[] b, int off, int len) should always return 0 for length == 0 | 
|  | </action> | 
|  | <action issue="IO-173" dev="sebb" type="add" due-to="Marcos VinÃcius da Silva"> | 
|  | FileUtils.listFiles() doesn't return directories | 
|  | </action> | 
|  | <action issue="IO-276" dev="sebb" type="fix" due-to="nkami"> | 
|  | "FileUtils#deleteDirectoryOnExit(File)" does not work | 
|  | </action> | 
|  | <action issue="IO-273" dev="sebb" type="fix" due-to="sebb"> | 
|  | BoundedInputStream.read() treats max differently from BoundedInputStream.read(byte[]...) | 
|  | </action> | 
|  | <action issue="IO-297" dev="sebb" type="add" due-to="Oleg Kalnichevski"> | 
|  | CharSequenceInputStream to efficiently stream content of a CharSequence | 
|  | </action> | 
|  | <action issue="IO-296" dev="sebb" type="update" due-to="Oleg Kalnichevski"> | 
|  | ReaderInputStream optimization: more efficient reading of small chunks of data | 
|  | </action> | 
|  | <action issue="IO-298" dev="sebb" type="fix" due-to="Christian Schulte"> | 
|  | Various methods of class 'org.apache.commons.io.FileUtils' incorrectly suppress 'java.io.IOException' | 
|  | </action> | 
|  | <action issue="IO-304" dev="ggregory" type="add" due-to="liangly"> | 
|  | The second constructor of Tailer class does not pass 'delay' to the third one | 
|  | </action> | 
|  | <action issue="IO-303" dev="ggregory" type="add" due-to="fabian.barney"> | 
|  | TeeOutputStream does not call branch.close() when main.close() throws an exception | 
|  | </action> | 
|  | <action issue="IO-302" dev="ggregory" type="add" due-to="jsteuerwald, detinho"> | 
|  | ArrayIndexOutOfBoundsException in BOMInputStream when reading a file without BOM multiple times | 
|  | </action> | 
|  | <action issue="IO-301" dev="ggregory" type="add" due-to="kaykay.unique"> | 
|  | Add IOUtils.closeQuietly(Selector) necessary | 
|  | </action> | 
|  | <action issue="IO-292" dev="sebb" type="add" due-to="sebb"> | 
|  | IOUtils.closeQuietly() should take a ServerSocket as a parameter | 
|  | </action> | 
|  | <action issue="IO-290" dev="sebb" type="add" due-to="sebb"> | 
|  | Add read/readFully methods to IOUtils | 
|  | </action> | 
|  | <action issue="IO-288" dev="sebb" type="add" due-to="Georg Henzler"> | 
|  | Supply a ReversedLinesFileReader | 
|  | </action> | 
|  | <action issue="IO-291" dev="ggregory" type="add" due-to="ggregory"> | 
|  | Add new function FileUtils.directoryContains. | 
|  | </action> | 
|  | <action issue="IO-275" dev="sebb" type="add" due-to="CJ Aspromgos"> | 
|  | FileUtils.contentEquals and IOUtils.contentEquals - Add option to ignore "line endings" | 
|  | Added contentEqualsIgnoreEOL methods to both classes | 
|  | </action> | 
|  | </release> | 
|  |  | 
|  | <release version="2.1" date="2011-Sep-28" description="New features and bug fixes."> | 
|  | <action dev="ggregory" type="add" issue="IO-285" due-to="ggregory"> | 
|  | Use standard Maven directory layout | 
|  | </action> | 
|  | <action dev="ggregory" type="add" issue="IO-284" due-to="ggregory"> | 
|  | Add IOUtils API toString for URL and URI to get contents | 
|  | </action> | 
|  | <action dev="ggregory" type="add" issue="IO-282" due-to="ggregory"> | 
|  | Add API FileUtils.copyFile(File input, OutputStream output) | 
|  | </action> | 
|  | <action dev="sebb" type="fix" issue="IO-280" due-to="sebb"> | 
|  | Dubious use of mkdirs() return code | 
|  | </action> | 
|  | <action type="fix" issue="IO-277"> | 
|  | ReaderInputStream enters infinite loop when it encounters an unmappable character | 
|  | </action> | 
|  | <action type="fix" issue="IO-264"> | 
|  | FileUtils.moveFile() Javadoc should specify FileExistsException thrown | 
|  | </action> | 
|  | <action type="add" issue="IO-262"> | 
|  | FileAlterationObserver has no getter for FileFilter | 
|  | </action> | 
|  | <action type="add" issue="IO-261"> | 
|  | Add FileUtils.getFile API with varargs parameter | 
|  | </action> | 
|  | <action type="fix" issue="IO-260"> | 
|  | ClassLoaderObjectInputStream does not handle Proxy classes | 
|  | </action> | 
|  | <action type="update" issue="IO-259"> | 
|  | FileAlterationMonitor.stop(boolean allowIntervalToFinish) | 
|  | </action> | 
|  | <action type="add" issue="IO-182"> | 
|  | Add new APPEND parameter for writing string into files | 
|  | </action> | 
|  | <action dev="sebb" type="fix" issue="IO-274" due-to="Frank Grimes"> | 
|  | Tailer returning partial lines when reaching EOF before EOL | 
|  | </action> | 
|  | <action dev="sebb" type="fix" issue="IO-266" due-to="Igor Smereka"> | 
|  | FileUtils.copyFile() throws IOException when copying large files to a shared directory (on Windows) | 
|  | </action> | 
|  | <action dev="sebb" type="fix" issue="IO-263" due-to="Gil Adam"> | 
|  | FileSystemUtils.freeSpaceKb throws exception for Windows volumes with no visible files. | 
|  | Improve coverage by also looking for hidden files. | 
|  | </action> | 
|  | <action dev="sebb" type="add" issue="IO-251" due-to="Marco Albini"> | 
|  | Add new read method "toByteArray" to handle InputStream with known size. | 
|  | </action> | 
|  | </release> | 
|  |  | 
|  | <release version="2.0.1" date="2010-Dec-26"> | 
|  | <action type="update"> | 
|  | TODO: Convert RELEASE-NOTES.txt from 2.0.1? | 
|  | </action> | 
|  | </release> | 
|  |  | 
|  | <release version="2.0" date="2010-Oct-18"> | 
|  | <action type="update"> | 
|  | TODO: Convert RELEASE-NOTES.txt from 2.0? | 
|  | </action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.4" date="2008-Jan-21"> | 
|  | <action type="update"> | 
|  | TODO: Convert RELEASE-NOTES.txt from 1.4? | 
|  | </action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.3.2" date="2007-Jul-02" description="Bug fixes."> | 
|  | <action dev="jochen" type="fix" issue="IO-115"> | 
|  | Some tests, which are implicitly assuming a Unix-like file | 
|  | system, are now skipped on Windows. | 
|  | </action> | 
|  | <action dev="jochen" type="fix" issue="IO-116"> | 
|  | Created the FileCleaningTracker, basically a non-static | 
|  | version of the FileCleaner, which can be controlled by | 
|  | the user. | 
|  | </action> | 
|  | <action dev="bayard" type="fix" issue="IO-117" due-to="Hiroshi Ikeda"> | 
|  | EndianUtils - both readSwappedUnsignedInteger(...) methods could | 
|  | return negative numbers due to int/long casting. | 
|  | </action> | 
|  | </release> | 
|  | </body> | 
|  | </document> |