<?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>Release Notes</title>
  </properties>

  <body>
    <!-- The release date is the date RC is cut -->
    <release version="2.7" date="Not yet published">
      <action dev="jochen" type="add">
        Added the ObservableInputStream, and the MessageDigestCalculatingInputStream.
      </action>
    </release>
    <release version="2.6" date="2016-MM-DD" description="New features and bug fixes.">
      <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-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-507" dev="ggregory" type="new">
        Add a ByteOrderFactory class.
      </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 behaviour; 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>
    <!-- The release date is the date RC is cut -->
    <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>
    <!-- The release date is the date RC is cut -->
    <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>
