<?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 xmlns="http://maven.apache.org/changes/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/xsd/changes-1.0.0.xsd">
  <properties>
    <title>Apache Commons IO Release Notes</title>
  </properties>
  <body>
    <release version="2.16.0" date="202Y-MM-DD" description="Java 8 is required.">
      <!-- Fix -->
      <action dev="ggregory" type="fix" due-to="Elliotte Rusty Harold">Fix and re-enable testSkip_RequiredCharsets #518.</action>
      <action dev="ggregory" type="fix" issue="IO-824" due-to="Miguel Munoz, Gary Gregory">SymbolicLineFileFilter documentation fixes.</action>
      <action dev="ggregory" type="fix" issue="IO-795" due-to="Miguel Munoz, Gary Gregory">CharSequenceInputStream.reset() only works once #520.</action>
      <action dev="ggregory" type="fix" issue="IO-795" due-to="Elliotte Rusty Harold">Finish TODO on CharSequenceInputStream #540.</action>
      <action dev="ggregory" type="fix" issue="IO-825" due-to="Arthur Chan, Gary Gregory">Add byte array size validation for methods in EndianUtils #521.</action>
      <action dev="ggregory" type="fix" issue="IO-825" due-to="dkdal, Gary Gregory">Add missing test case CircularByteBufferTest.</action>
      <action dev="ggregory" type="fix" issue="IO-781" due-to="Elliotte Rusty Harold">Make CharSequenceInputStream.available() more correct in the face of multibyte encodings #525.</action>
      <action dev="ggregory" type="fix" issue="IO-781" due-to="Elliotte Rusty Harold">Remove unreachable code in AbstractIOFileFilterTest #526.</action>
      <action dev="ggregory" type="fix" issue="IO-808" due-to="Elliotte Rusty Harold">Rationalize and unify checking for existence of files and directories #529.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Avoid NullPointerException in IOCase.checkEquals(String, String) on null input.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Avoid NullPointerException in CanExecuteFileFilter.accept(File) on null input.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Avoid NullPointerException in CanExecuteFileFilter.accept(Path, BasicFileAttributes) on null input.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Avoid NullPointerException in CanReadFileFilter.accept(File) on null input.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Avoid NullPointerException in CanReadFileFilter.accept(Path, BasicFileAttributes) on null input.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Avoid NullPointerException in CanWriteFileFilter.accept(File) on null input.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Avoid NullPointerException in CanWriteFileFilter.accept(Path, BasicFileAttributes) on null input.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Avoid NullPointerException in DirectoryFileFilter.accept(File) on null input.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Avoid NullPointerException in DirectoryFileFilter.accept(Path, BasicFileAttributes) on null input.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Avoid NullPointerException in EmptyFileFilter.accept(File) on null input.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Avoid NullPointerException in EmptyFileFilter.accept(Path, BasicFileAttributes) on null input.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Avoid NullPointerException in FileFileFilter.accept(File) on null input.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Avoid NullPointerException in FileFileFilter.accept(Path, BasicFileAttributes) on null input.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Avoid NullPointerException in HiddenFileFilter.accept(File) on null input.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Avoid NullPointerException in HiddenFileFilter.accept(Path, BasicFileAttributes) on null input.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Avoid NullPointerException in IOCase.checkIndexOf(String, int, String) on null input.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Avoid NullPointerException in IOCase.checkRegionMatches(String, int, String) on null input.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">BoundedInputStream.getCount() should not count EOF.</action>
      <action dev="ggregory" type="fix"                due-to="Elliotte Rusty Harold, Gary Gregory">Modernize temporary file creation and deletion in DeferredFileOutputStreamTest #535.</action>
      <action dev="ggregory" type="fix"                due-to="Elliotte Rusty Harold">Add PathMatcher to IOFileFilter class Javadoc #536.</action>
      <action dev="ggregory" type="fix" issue="IO-781" due-to="Marcono1234">Fix CharSequenceInputStream coding exception handling #537.</action>
      <action dev="ggregory" type="fix" issue="IO-781" due-to="Marcono1234">Deprecate int CountingInputStream#getCount() in favor of long CountingInputStream#getByteCount().</action>
      <action dev="ggregory" type="fix" issue="IO-828" due-to="Elliotte Rusty Harold, Gary Gregory">Deprecate CountingInputStream.resetCount() in favor of resetByteCount().</action>
      <action dev="ggregory" type="fix" issue="IO-828" due-to="Gary Gregory">Deprecate CountingInputStream.getMaxLength() in favor of getMaxCount()).</action>
      <action dev="ggregory" type="fix" issue="IO-818" due-to="Gary Gregory">NullInputStream breaks InputStream's read method contract.</action>
      <action dev="ggregory" type="fix"                due-to="Elliotte Rusty Harold">Javadoc shouldn't reference 1.x behavior #539.</action>
      <action dev="ggregory" type="fix" issue="IO-829" due-to="Elliotte Rusty Harold, Gary Gregory">Don't decode and reencode characters in a potentially different charset in AbstractOrigin.CharSequenceOrigin.getReader(Charset).</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Let subclasses of CountingInputStream.afterRead(int) throw IOException.</action>
      <action dev="ggregory" type="fix" issue="IO-807" due-to="Elliotte Rusty Harold, Gary Gregory">Characterization test for broken symlinks when copying directories #547.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">ClosedInputStream.read(byte[], int, int) does not always return -1.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">ClosedOutputStream.write(byte[], int, int) does not always throw IOException.</action>
      <action dev="ggregory" type="fix"                due-to="Sylwester Lachiewicz, Gary Gregory">XmlStreamReader can't parse an XML document with a multi-line prolog #550.</action>
      <action dev="ggregory" type="fix"                due-to="Andreas Hubold, Gary Gregory">XmlStreamReader can't parse XML an document with an external parsed entity prolog.</action>
      <action dev="ggregory" type="fix" issue="IO-836" due-to="Elliotte Rusty Harold">Update FileNameUtils Javadoc #554.</action>
      <action dev="ggregory" type="fix" issue="IO-807" due-to="Jordi Sola, Elliotte Rusty Harold">Copy symlinks, not the files the symlinks point to #558.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Pickup apache-rat-plugin version from parent POM.</action>
      <action dev="ggregory" type="fix"                due-to="Elliotte Rusty Harold">Add test for copying a symlink FileUtilsTest#testCopyFile_symLink() #564.</action>
      <action dev="ggregory" type="fix"                due-to="Elliotte Rusty Harold">Make copyFile copy symbolic links by value rather than reference #565.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Deprecate CopyUtils 0-argument constructor.</action>
      <action dev="ggregory" type="fix" issue="IO-843" due-to="Gary Gregory, Elliotte Rusty Harold">Deprecate EndianUtils 0-argument constructor.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Deprecate FileSystemUtils 0-argument constructor.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Deprecate FilenameUtils 0-argument constructor.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Deprecate RandomAccessFiles 0-argument constructor.</action>
      <action dev="ggregory" type="fix"                due-to="Elliotte Rusty Harold, Gary Gregory">Clarify and correct EndianUtils and SwappedDataInputStream API doc #566.</action>
      <action dev="ggregory" type="fix"                due-to="Elliotte Rusty Harold">Add characterization test for copying a symlinked directory #570.</action>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">RandomAccessFileInputStream.builder().get() now throws ISE instead of NPE.</action>
      <action dev="ggregory" type="fix" issue="IO-845" due-to="Elliotte Rusty Harold">Test links to targets outside the source directory #571.</action>
      <action dev="ggregory" type="fix"                due-to="Elliotte Rusty Harold">Focus Javadoc on current version rather than past versions #573, #574.</action>
      <action dev="ggregory" type="fix" issue="IO-469" due-to="Grigory Fadeev, Kristian Rosenvold, Elliotte Rusty Harold">"Self-suppression not permitted" while using BrokenOutput and BrokenInput streams with try-with-resources.</action>
      <action dev="ggregory" type="fix" issue="IO-405" due-to="Elliotte Rusty Harold">Handle zero and negative thresholds #587.</action>
      <!-- Add -->
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add and use PathUtils.getFileName(Path, Function&lt;Path, R&gt;).</action>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add and use PathUtils.getFileNameString().</action>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Make public Erase.rethrow(Throwable).</action>
      <action dev="ggregory" type="add" issue="IO-826" due-to="markslater, Gary Gregory">Add BrokenInputStream.BrokenInputStream(Throwable).</action>
      <action dev="ggregory" type="add" issue="IO-826" due-to="markslater, Gary Gregory">Add BrokenReader.BrokenReader(Throwable).</action>
      <action dev="ggregory" type="add" issue="IO-826" due-to="markslater, Gary Gregory">Add BrokenOutputStream.BrokenOutputStream(Throwable).</action>
      <action dev="ggregory" type="add" issue="IO-826" due-to="markslater, Gary Gregory">Add BrokenWriter.BrokenWriter(Throwable).</action>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add BoundedInputStream.getRemaining().</action>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add FileTimes.toNtfsTime(long).</action>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add FileTimes.fromUnixTime(long).</action>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add FileTimes.isUnixTime(FileTime).</action>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add FileTimes.isUnixTime(long).</action>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add FileTimes.toUnixTime(FileTime).</action>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add BrokenInputStream.Builder.</action>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add PathUtils.getExtension(Path).</action>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add PathUtils.getBaseName(Path).</action>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add ThrottledInputStream.</action>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add IORunnable.noop().</action>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add ChecksumInputStream and test #548.</action>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add AbstractStreamBuilder.getReader().</action>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add Maven property project.build.outputTimestamp for build reproducibility.</action>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add ProxyInputStream.unwrap().</action>
      <!--  UPDATE -->
      <action dev="ggregory" type="update"             due-to="Gary Gregory">Bump commons.bytebuddy.version from 1.14.10 to 1.14.11 #534.</action>
      <action dev="ggregory" type="update"             due-to="Gary Gregory">Bump org.apache.commons:commons-parent from 65 to 66.</action>
      <action dev="ggregory" type="update"             due-to="Dependabot">Bump commons-codec:commons-codec from 1.16.0 to 1.16.1 #583.</action>
    </release>
    <release version="2.15.1" date="2023-11-24" description="Java 8 is required.">
      <!-- FIX -->
      <action dev="sebb" type="fix" due-to="Gregor Dschung">Fix wrong issue id in change log #503.</action>
      <action dev="ggregory" type="fix" due-to="Stephan Markwalder, Gary Gregory">Add test for FileChannels.contentEquals() #509.</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix FileChannels.contentEquals().</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix some Javadoc issues in LineIterator and IOUtils.</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Simplify FileAlterationObserver internal processing.</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in RegexFileFilter.RegexFileFilter(Pattern).</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in RegexFileFilter.accept(Path, BasicFileAttributes).</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix SpotBugs error: Class org.apache.commons.io.filefilter.RegexFileFilter defines non-transient non-serializable instance field pathToString [org.apache.commons.io.filefilter.RegexFileFilter] In RegexFileFilter.java SE_BAD_FIELD.</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix SpotBugs error: Class org.apache.commons.io.filefilter.DelegateFileFilter defines non-transient non-serializable instance field fileFilter [org.apache.commons.io.filefilter.DelegateFileFilter] In DelegateFileFilter.java SE_BAD_FIELD.</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix SpotBugs error: Class org.apache.commons.io.filefilter.DelegateFileFilter defines non-transient non-serializable instance field fileNameFilter [org.apache.commons.io.filefilter.DelegateFileFilter] In DelegateFileFilter.java SE_BAD_FIELD.</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix SpotBugs error: org.apache.commons.io.function.IOStream$1.next() cannot throw NoSuchElementException [org.apache.commons.io.function.IOStream$1] At IOStream.java:[line 98] IT_NO_SUCH_ELEMENT.</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix SpotBugs error: org.apache.commons.io.monitor.FileAlterationMonitor.getObservers() may expose internal representation by returning FileAlterationMonitor.observers [org.apache.commons.io.monitor.FileAlterationMonitor] At FileAlterationMonitor.java:[line 124] EI_EXPOSE_REP.</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix SpotBugs error: Class org.apache.commons.io.monitor.FileAlterationObserver defines non-transient non-serializable instance field fileFilter [org.apache.commons.io.monitor.FileAlterationObserver] In FileAlterationObserver.java SE_BAD_FIELD.</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix SpotBugs error: Class org.apache.commons.io.monitor.FileAlterationObserver defines non-transient non-serializable instance field listeners [org.apache.commons.io.monitor.FileAlterationObserver] In FileAlterationObserver.java SE_BAD_FIELD.</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix SpotBugs error: org.apache.commons.io.FileCleaningTracker.getDeleteFailures() may expose internal representation by returning FileCleaningTracker.deleteFailures [org.apache.commons.io.FileCleaningTracker] At FileCleaningTracker.java:[line 218] EI_EXPOSE_REP.</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix SpotBugs error: org.apache.commons.io.IOExceptionList.getCauseList() may expose internal representation by returning IOExceptionList.causeList [org.apache.commons.io.IOExceptionList] At IOExceptionList.java:[line 118] EI_EXPOSE_REP.</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix SpotBugs error: org.apache.commons.io.IOExceptionList.getCauseList(Class) may expose internal representation by returning IOExceptionList.causeList [org.apache.commons.io.IOExceptionList] At IOExceptionList.java:[line 129] EI_EXPOSE_REP.</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix SpotBugs error: org.apache.commons.io.file.AccumulatorPathVisitor.getDirList() may expose internal representation by returning AccumulatorPathVisitor.dirList [org.apache.commons.io.file.AccumulatorPathVisitor] At AccumulatorPathVisitor.java:[line 179] EI_EXPOSE_REP.</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix SpotBugs error: org.apache.commons.io.file.AccumulatorPathVisitor.getFileList() may expose internal representation by returning AccumulatorPathVisitor.fileList [org.apache.commons.io.file.AccumulatorPathVisitor] At AccumulatorPathVisitor.java:[line 188] EI_EXPOSE_REP.</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix SpotBugs error: org.apache.commons.io.input.ObservableInputStream.getObservers() may expose internal representation by returning ObservableInputStream.observers [org.apache.commons.io.input.ObservableInputStream] At ObservableInputStream.java:[line 187] EI_EXPOSE_REP.</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix SpotBugs error: Exception thrown in class org.apache.commons.io.input.UnsynchronizedByteArrayInputStream at new org.apache.commons.io.input.UnsynchronizedByteArrayInputStream(byte[], int) will leave the constructor. The object under construction remains partially initialized and may be vulnerable to Finalizer attacks. [org.apache.commons.io.input.UnsynchronizedByteArrayInputStream, org.apache.commons.io.input.UnsynchronizedByteArrayInputStream] At UnsynchronizedByteArrayInputStream.java:[line 202]At UnsynchronizedByteArrayInputStream.java:[line 202] CT_CONSTRUCTOR_THROW.</action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix SpotBugs error: Exception thrown in class org.apache.commons.io.input.UnsynchronizedByteArrayInputStream at new org.apache.commons.io.input.UnsynchronizedByteArrayInputStream(byte[], int, int) will leave the constructor. The object under construction remains partially initialized and may be vulnerable to Finalizer attacks. [org.apache.commons.io.input.UnsynchronizedByteArrayInputStream, org.apache.commons.io.input.UnsynchronizedByteArrayInputStream] At UnsynchronizedByteArrayInputStream.java:[line 223]At UnsynchronizedByteArrayInputStream.java:[line 223] CT_CONSTRUCTOR_THROW.</action>
      <!-- UPDATE -->
      <action dev="ggregory" type="update" due-to="Gary Gregory">Bump org.codehaus.mojo:exec-maven-plugin from 3.1.0 to 3.1.1 #512.</action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">Bump commons-lang3 from 3.13.0 to 3.14.0.</action>
      <action dev="ggregory" type="update" due-to="Dependabot">Bump commons.bytebuddy.version from 1.14.9 to 1.14.10 #516.</action>
      <action dev="ggregory" type="update" due-to="Dependabot">Bump commons-parent from 64 to 65.</action>
    </release>
    <release version="2.15.0" date="2023-10-21" description="Java 8 is required.">
      <!-- FIX -->
      <action dev="sebb" type="fix" issue="IO-815" due-to="Laurence Gonsalves">
        XmlStreamReader encoding match RE is too strict.
      </action>
      <action dev="ggregory" type="fix" issue="IO-810" due-to="Gregor Dschung, Gary Gregory">
        Javadoc in FileUtils does not reflect code for thrown exceptions.
      </action>
      <action dev="ggregory" type="fix" issue="IO-812" due-to="Adam Rauch, Gary Gregory">
        Javadoc should mention closing Streams based on file resources.
      </action>
      <action dev="ggregory" type="fix" issue="IO-811" due-to="Adam Rauch, Gary Gregory">
        In tests, Files.walk() direct and indirect callers fail to close the returned Stream.
      </action>
      <action dev="ggregory" type="fix" issue="IO-811" due-to="Adam Rauch, Gary Gregory">
        FileUtils.listFiles(File, String[], boolean) fails to close its internal Stream.
      </action>
      <action dev="ggregory" type="fix" issue="IO-811" due-to="Adam Rauch, Gary Gregory">
        FileUtils.iterateFiles(File, String[], boolean) fails to close its internal Stream.
      </action>
      <action dev="ggregory" type="fix" issue="IO-811" due-to="Adam Rauch, Gary Gregory">
        StreamIterator fails to close its internal Stream.
      </action>
      <action dev="ggregory" type="fix" issue="IO-814" due-to="Elliotte Rusty Harold, Gary Gregory">
        Don't throw UncheckedIOException #491.
      </action>
      <action dev="ggregory" type="fix" issue="IO-414" due-to="Elliotte Rusty Harold, Gary Gregory">
        Don't write a BOM on every (or any) line #492.
      </action>
      <action dev="ggregory" type="fix" issue="IO-814" due-to="Gary Gregory">
        RandomAccessFileMode.create(Path) provides a better NullPointerException message.         
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Improve performance of PathUtils.fileContentEquals(Path, Path, LinkOption[], OpenOption[]) by about 60%, see PathUtilsContentEqualsBenchmark.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Improve performance of PathUtils.fileContentEquals(Path, Path) by about 60%, see PathUtilsContentEqualsBenchmark.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Improve performance of FileUtils.contentEquals(File, File) by about 60%, see PathUtilsContentEqualsBenchmark.
      </action>
      <action dev="ggregory" type="fix" due-to="Elliotte Rusty Harold">
        Remove unused test code #494.
      </action>
      <action dev="ggregory" type="fix" due-to="sebbASF">
        [Javadoc] IOUtils#contentEquals does not throw NullPointerException #496.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix CodeQL warnings in UnsynchronizedBufferedInputStream: Implicit narrowing conversion in compound assignment.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        MessageDigestCalculatingInputStream.MessageDigestMaintainingObserver.MessageDigestMaintainingObserver(MessageDigest) now throws a NullPointerException
        if the MessageDigest is null.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        MessageDigestCalculatingInputStream.MessageDigestCalculatingInputStream(InputStream, MessageDigest) now throws a NullPointerException
        if the MessageDigest is null.
      </action>
      <action issue="IO-816" dev="ggregory" type="fix" due-to="Andreas Loth, Gary Gregory">
        UnsynchronizedBufferedInputStream.read(byte[], int, int) does not use buffer.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Pick up Maven Moditect plugin version from parent POM.
      </action>
      <action issue="IO-821" dev="ggregory" type="fix" due-to="Frédéric Hannes, Gary Gregory">
        2.15.0 breaks backwards compatibility in PathUtils.fileContentEquals for the Zip file system.
      </action>
      <!-- ADD -->
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add org.apache.commons.io.channels.FileChannels.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add RandomAccessFiles#contentEquals(RandomAccessFile, RandomAccessFile).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add RandomAccessFiles#reset(RandomAccessFile).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathUtilsContentEqualsBenchmark.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add org.apache.commons.io.StreamIterator.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add MessageDigestInputStream and deprecate MessageDigestCalculatingInputStream.
      </action>
      <!-- UPDATE -->
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump org.apache.commons:commons-parent from 62 to 64.
      </action>
    </release>
    <release version="2.14.0" date="2023-09-24" description="Java 8 is required.">
      <!-- FIX -->
      <action dev="ggregory" type="fix" issue="IO-799" due-to="Jeroen van der Vegt, Gary Gregory">
        ReaderInputStream.read() throws an exception instead of returning -1 when called again after returning -1.
      </action>
      <action dev="ggregory" type="fix" issue="IO-804" due-to="Elliotte Rusty Harold, Gary Gregory">
        FileUtils.forceMkdirParent() Javadoc is incorrect.
      </action>
      <action dev="ggregory" type="fix" due-to="step-security-bot, Gary Gregory">
        [StepSecurity] ci: Harden GitHub Actions #461.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        MagicNumberFileFilter.accept(Path, BasicFileAttributes) doesn't set its byteOffset before reading.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Javadoc improvements.
      </action>
      <action dev="ggregory" type="fix" due-to="Josh Soref, Gary Gregory">
        Spelling #468.
      </action>
      <action dev="ggregory" type="fix" due-to="Jakub Kupczyk">
        Use assertThrows #475.
      </action>
      <!-- ADD -->
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add DeferredFileOutputStream.getPath().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add FileCleaningTracker.track(Path, Object[, FileDeleteStrategy]).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add IOUtils.skip[Fully](InputStream, long, Supplier&lt;byte[]&gt;).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add FilesUncheck.find(Path, int, BiPredicate%lt;Path, BasicFileAttributes&gt;, FileVisitOption...)
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add IOIntSupplier.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add IOLongSupplier.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add Uncheck.getAsInt(IOIntSupplier [, Supplier&lt;String&gt;]).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add Uncheck.getAsLong(IOLongSupplier [, Supplier&lt;String&gt;]).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add Uncheck.run(IORunnable, Supplier&lt;String&gt;)
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add Uncheck.get(IOSupplier, Supplier&lt;String&gt;)
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        IOFileFilter now also extends java.nio.file.PathMatcher.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathMatcherFileFilter to adapt java.nio.file.PathMatcher.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add ThresholdingOutputStream.getOutputStream() and deprecate getStream().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add DeferredFileOutputStream.Builder.setOutputFile(Path).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add DeferredFileOutputStream.Builder.setDirectory(Path).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add AbstractStreamBuilder.setBufferSizeChecker(IntToIntFunction).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add AbstractStreamBuilder.setBufferSizeMax(int).
      </action>
      <!-- UPDATE -->
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump jimfs from 1.2 to 1.3.0 #465 (tests).
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump commons-parent from 58 to 62.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump commons-lang3 from 3.12 to 3.13.0.
      </action>
    </release>
    <release version="2.13.0" date="2023-06-03" description="Java 8 is required.">
      <!-- FIX -->
      <action issue="IO-791" dev="ggregory" type="fix" due-to="Chad Wilson, Gary Gregory">
        Regression in FileUtils.touch() - no longer creates parent directories.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        ByteArrayOrigin should be able convert a byte[] to a ByteArrayInputStream.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        AbstractOriginSupplier.checkOrigin() now throws IllegalStateException instead of NullPointerException.
      </action>
      <action issue="IO-796" dev="ggregory" type="fix" due-to="Giacomo Boccardo, Gary Gregory">
        FileAlreadyExistsException in PathUtils.createParentDirectories(Path, LinkOption, FileAttribute...).
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Only read the relevant portion of a file in AbstractOrigin.FileOrigin.getByteArray(long, int).
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Only read the relevant portion of a file in AbstractOrigin.PathOrigin.getByteArray(long, int).
      </action>
      <action dev="ggregory" type="fix" due-to="Shai Shapira, Gary Gregory" issue="IO-798">
        DeferredFileOutputStream throws exception when system temp dir is a symlink.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        ReaderInputStream.Builder.setCharsetEncoder(null) should reset to a default object, not throw an NPE.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        ReaderInputStream.Builder.setCharset(null) should reset to a default object, not throw an NPE.
      </action>
      <action dev="ggregory" type="fix" issue="IO-800" due-to="Jan Høydahl, Gary Gregory">
        Fix back-incompatible change for PathUtils.deleteDirectory(): throw NoSuchFileException instead of IllegalArgumentException #459.
      </action>
      <action dev="ggregory" type="fix" issue="IO-801" due-to="James Howe, Gary Gregory">
        Deprecation documentation gives incorrect alternative.
      </action>
      <!-- ADD -->
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add CharSequenceInputStream.Builder.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add ChunkedOutputStream.Builder.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add AbstractStreamBuilder.setOpenOptions(OpenOption...).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add some missing conversions to AbstractOrigin subclasses.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add AbstractOrigin.getByteArray(long, int).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and use RandomAccessFiles.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add AbstractOrigin.size().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathUtils.EMPTY_FILE_ATTRIBUTE_ARRAY.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add CharSequenceInputStream.Builder.setCharsetEncoder(CharsetEncoder).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add CharsetEncoders.toCharsetEncoder(CharsetEncoder, Supplier&lt;CharsetEncoder&gt;).
      </action>
      <!-- UPDATE -->
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Bump commons-parent from 57 to 58.
      </action>
    </release>
    <release version="2.12.0" date="2023-05-13" description="Java 8 is required.">
      <!-- FIX -->
      <action issue="IO-697" dev="kinow" type="fix" due-to="otter606">
        IOUtils.toByteArray size validation does not match documentation.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix Javadoc links to the JRE Javadoc 8.
      </action>
      <action issue="IO-744" dev="ggregory" type="fix" due-to="RBRi, Gary Gregory">
        FileWriterWithEncoding for an existing file no longer truncates the file. #251.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        A null Charset or Charset name in FileWriterWithEncoding constructors uses the default Charset.
      </action>
      <action dev="ggregory" type="fix" due-to="Davide Angelocola">
        Fix usage of assertNotNull #269.
      </action>
      <action issue="IO-727" dev="ggregory" type="fix" due-to="trungPa, Gary Gregory">
        FilenameUtils directoryContains() should handle files with the same prefix #217.
      </action>
      <action issue="IO-746" dev="ggregory" type="add" due-to="Davide Angelocola">
        Drop unnecessary casts and conversions #267.
      </action>
      <action issue="IO-748" dev="ggregory" type="fix" due-to="Dirk Heinrichs, Gary Gregory, Elango Ravi">
        FileUtils.moveToDirectory() exception documentation and exception message error.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        ThreadMonitor.sleep(Duration) ignores nanoseconds.
      </action>
      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
        Fix Javadoc in ThreadMonitor#run() method. #273.
      </action>
      <action issue="IO-749" dev="ggregory" type="fix" due-to="haihuiyang, Gary Gregory">
        FileUtils.listFiles() does not list matching files if File parameter is a symbolic link.
      </action>
      <action dev="ggregory" type="fix" due-to="niranjanghule, Gary Gregory">
        Fix typo in Javadocs for FileUtils#convertFileCollectionToFileArray() #276.
      </action>
      <action dev="ggregory" type="fix" due-to="DaGeRe, Gary Gregory">
        Avoid Code Duplication: Reuse Sleep from ThreadMonitor #66.
      </action>
      <action issue="IO-750" dev="ggregory" type="fix" due-to="Sita Geßner, Sebastian Peters, Gary Gregory">
        FileUtils.iterateFiles also lists directories.
      </action>
      <action issue="IO-721" dev="ggregory" type="fix" due-to="Dirk Heinrichs, Gary Gregory">
        Wrong exception message in FileUtils.setLastModified(File, File).
      </action>
      <action issue="IO-717" dev="ggregory" type="fix" due-to="Marcono1234, Gary Gregory">
        Infinite loop in ReaderInputStream instead of throwing exception for CodingErrorAction.REPORT.
      </action>
      <action issue="IO-716" dev="ggregory" type="fix" due-to="Marcono1234, Gary Gregory">
        ReaderInputStream enter infinite loop for too small buffer sizes.
      </action>
      <action issue="IO-638" dev="ggregory" type="fix" due-to="Thayne McCombs, Gary Gregory">
        Infinite loop in CharSequenceInputStream.read for 4-byte characters with UTF-8 and 3-byte buffer.
      </action>
      <action issue="IO-638" dev="ggregory" type="fix" due-to="Gary Gregory">
        PathUtils.setReadOnly(Path, boolean, LinkOption...) should add READ_* file attributes when using POSIX.
      </action>
      <action issue="IO-638" dev="ggregory" type="fix" due-to="Gary Gregory">
        PathUtils.setReadOnly(Path, boolean, LinkOption...) readOnly argument is always assumed true on POSIX.
      </action>
      <action issue="IO-729" dev="ggregory" type="fix" due-to="Rob Spoor, Gary Gregory">
        Prevent IllegalArgumentExceptions in BrokenInputStream/Reader/OutputStream/Writer #278.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        FileUtils.copyURLToFile(URL, File, int, int) leaks its URLConnection.
        Called by FileUtils.copyURLToFile(URL, File).
      </action>
      <action issue="IO-714" dev="ggregory" type="fix" due-to="kevinwang1975, Gary Gregory">
        Fixed ReaderInputStream not calling CharsetEncoder.flush issue #283.
      </action>
      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
        Minor changes #287.
      </action>
      <action issue="IO-756" dev="ggregory" type="fix" due-to="wodencafe, Gary Gregory, Bruno P. Kinoshita">
        Update FileWriterWithEncoding to extend ProxyWriter #296.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Initialize the message of an IOExceptionList to a default if null.
      </action>
      <action issue="IO-751" dev="ggregory" type="fix" due-to="Gary Gregory, Richard Cyganiak">
        When deleting symlinks, File/PathUtils.deleteDirectory() changes file permissions of the target.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        ReaderInputStream maps null Charset, Charset name, and CharsetEncoder to the platform default instead of throwing a NullPointerException.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        CharSequenceInputStream maps null Charset and Charset name to the platform default instead of throwing a NullPointerException.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        WriterOutputStream maps null Charset, Charset name, and CharsetEncoder name to the platform default instead of throwing a NullPointerException.
      </action>
      <action dev="ggregory" type="fix" due-to="Chad Wilson, Gary Gregory">
        FileUtils.copyURLToFile should create target parent directories and overwrite target file #319.
      </action>
      <action issue="IO-484" dev="ggregory" type="fix" due-to="Marcono1234, Gary Gregory">
        Fix incorrect FilenameUtils Javadoc for null bytes #310.
      </action>
      <action issue="IO-484" dev="ggregory" type="fix" due-to="Arturo Bernal">
        Change to uppercase variable constant. #323.
      </action>
      <action issue="IO-484" dev="ggregory" type="fix" due-to="David Huang, Gary Gregory">
        IOCase.isCaseSensitive(IOCase) result is backward #325.
      </action>
      <action issue="IO-758" dev="ggregory" type="fix" due-to="Marcono1234, Gary Gregory">
        Deprecate PathUtils.NOFOLLOW_LINK_OPTION_ARRAY in favor of noFollowLinkOptionArray().
      </action>
      <action dev="ggregory" type="fix" due-to="Marcono1234, Gary Gregory">
        Improve ReaderInputStream documentation #291.
      </action>
      <action dev="ggregory" type="fix" due-to="richarda23">
        Fix misleading comments in FileFilterTest #334.
      </action>
      <action dev="ggregory" type="fix" due-to="Diego Marcilio">
        Add missing Javadoc for exceptions thrown for invalid arguments #339.
      </action>
      <action dev="ggregory" type="fix" due-to="richarda23">
        FileFilterTest minor fixes #340.
      </action>
      <action issue="IO-764" dev="ggregory" type="fix" due-to="DaGeRe, Gary Gregory">
        IOUtils.write() throws OutOfMemoryError/NegativeArraySizeException while writing big strings #343.
      </action>
      <action issue="IO-768" dev="ggregory" type="fix" due-to="Marcono1234, Michael Osipov">
        Add reserved Windows file names CONIN$ and CONOUT$ to FileSystem #355.
      </action>
      <action issue="IO-773" dev="ggregory" type="fix" due-to="Dominik Reinarz, Gary Gregory">
        RegexFileFilter is no longer Serializable.
      </action>
      <action issue="IO-763" dev="ggregory" type="fix" due-to="Richard Adams, Gary Gregory">
        [Javadoc] FileFilterUtils doc does not match impl: missing some file filters.
      </action>
      <action issue="IO-762" dev="ggregory" type="fix" due-to="Leonidas Chiron, Gary Gregory">
        FileSystem.WINDOWS.isReservedFileName doesn't check for file extension.
      </action>
      <action issue="IO-772" dev="ggregory" type="fix" due-to="Dan Ziemba, Gary Gregory">
        Confusing Javadoc on IOUtils#resourceToURL() and other resource* methods.
      </action>
      <action issue="IO-443" dev="ggregory" type="fix" due-to="Dan Ziemba, Gary Gregory">
        FileUtils.copyFile methods throw an unnecessary "Failed to copy full contents from" exception.
      </action>
      <action issue="IO-564" dev="ggregory" type="fix" due-to="Hao Zhong, Bernd Eckenfels, Pascal Schumacher, Gary Gregory">
        Pick up Javadoc from super for override write() methods in AbstractByteArrayOutputStream and ByteArrayOutputStream.
      </action>
      <action dev="ggregory" type="fix" due-to="Marc Wrobel">
        Fix minor typos #367.
      </action>
      <action issue="IO-776" dev="kinow" type="fix" due-to="Chris Povirk">
        Fix parameters to requireNonNull call in DeferredOutputSteam #368.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix PathUtils.copyFileToDirectory(URL,Path,CopyOption[]).
      </action>
      <action issue="IO-386" dev="ggregory" type="fix" due-to="Sebb, Bernd Eckenfels, zhipengxu, Gary Gregory">
        FileUtils.doCopyFile uses different methods to check the file sizes.
      </action>
      <action dev="ggregory" type="fix" due-to="Michael Ernst">
        Fix typos #375.
      </action>
      <action issue="IO-611" dev="ggregory" type="fix" due-to="Fedor Urvanov">
        FilenameUtils.normalize javadoc and tests #383.
      </action>
      <action issue="IO-611" dev="ggregory" type="fix" due-to="ArdenL-Liu, Bruno P. Kinoshita, Gary Gregory">
        Better docs in IOUtils and IOUtils.byteArray(int size) #374.
      </action>
      <action issue="IO-782" dev="ggregory" type="fix" due-to="Matteo Di Giovinazzo, Gary Gregory">
        SequenceReader should close readers when its close method is called #391.
      </action>
      <action issue="IO-790" dev="ggregory" type="fix" due-to="Miguel Muñoz, Gary Gregory">
        Fix symbolic link file filter #450.
      </action>
      <action issue="IO-790" dev="ggregory" type="fix" due-to="maxxedev, Gary Gregory, Bruno P. Kinoshita">
        Apply nanoseconds precision for QueueInputStream timeout duration. #453.
      </action>
      <action dev="ggregory" type="fix" due-to="Marcono1234">
        Fix overflow for FileUtilsTest constants #456.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Serialization is deprecated and will be removed in 3.0.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        FileSystemUtils.performCommand(String[], int, Duration): Use Locale.getDefault() instead of ENGLISH.
      </action>
      <!-- ADD -->
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        Add GitHub coverage.yml.
      </action>
      <action issue="IO-726" dev="ggregory" type="fix" due-to="shollander, Gary Gregory">
        Add MemoryMappedFileInputStream #215.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add BrokenReader.INSTANCE.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add UncheckedBufferedReader.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add UncheckedFilterReader.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add UncheckedFilterWriter.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add UncheckedFilterInputStream.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add UncheckedFilterOutputStream.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add BrokenInputStream.INSTANCE.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add ClosedInputStream.INSTANCE and deprecate CLOSED_INPUT_STREAM.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add ClosedReader.INSTANCE and deprecate CLOSED_READER.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add BrokenWriter.INSTANCE.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add ClosedOutputStream.INSTANCE and deprecate CLOSED_OUTPUT_STREAM.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add ClosedWriter.INSTANCE and deprecate CLOSED_WRITER.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add NullOutputStream.INSTANCE and deprecate NULL_OUTPUT_STREAM.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add NullPrintStream.INSTANCE and deprecate NULL_PRINT_STREAM.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add NullWriter.INSTANCE and deprecate NULL_WRITER.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add NullInputStream.INSTANCE.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add NullReader.INSTANCE.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathUtils.readString(Path, Charset).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add FileUtils.newOutputStream(File, boolean).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathUtils.newOutputStream(Path, boolean).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add UncheckedAppendable.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and reuse UncheckedIOExceptions.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathUtils.getTempDirectory().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add FileSystem.getNameSeparator().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add FileSystem.normalizeSeparators().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathUtils.isNewer(Path, FileTime, LinkOption...).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathUtils.isNewer(Path, Instant, LinkOption...).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add AgeFileFilter.AgeFileFilter(Instant).
        Add AgeFileFilter.AgeFileFilter(Instant, boolean).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add FileUtils.lastModifiedFileTime(File).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add FileTimes.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathUtils.waitFor(Path, Duration, LinkOption...).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add org.apache.commons.io.input.Tailer.getDelayDuration().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add FileUtils.current().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and use PathUtils.setLastModifiedTime(Path) for more precision.
        Add and use PathUtils.setLastModifiedTime(Path, Path) for more precision.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and use PathUtils.isNewer(Path, ChronoZonedDateTime, LinkOption...) for more precision.
        Add and use PathUtils.isNewer(Path, Path) for more precision.
        Add and use FileUtils.isNewer(File, FileTime) for more precision.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and use PathUtils.isOlder(Path, FileTime, LinkOption...).
        Add and use PathUtils.isOlder(Path, Instant, LinkOption...).
        Add and use PathUtils.isOlder(Path, long, LinkOption...).
        Add and use PathUtils.isOlder(Path, Path).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and use PathUtils.sizeOf(Path).
        Add and use PathUtils.sizeOfAsBigInteger(Path).
        Add and use PathUtils.sizeOfDirectory(Path).
        Add and use PathUtils.sizeOfDirectoryAsBigInteger(Path).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and use IOCase.value(IOCase, IOCase).
      </action>
      <action dev="jonfreedman" type="add" due-to="Jon Freedman, Gary Gregory">
        Add Tailer.Tailable interface to allow tailing of remote files for example using jCIFS.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and use RandomAccessFileMode.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathUtils.writeString(Path, CharSequence, Charset, OpenOption...).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathUtiFiles.getFileAttributeView() shorthands:
          - PathUtils.getAclFileAttributeView(Path, LinkOption...)
          - PathUtils.getDosFileAttributeView(Path, LinkOption...)
          - PathUtils.getPosixFileAttributeView(Path, LinkOption...)
      </action>
      <action issue="IO-747" dev="mgrigorov" type="add">
        Make commons-io a JPMS module by adding module-info.class.
      </action>
      <action issue="IO-753" dev="ggregory" type="add" due-to="SebastianDietrich, Gary Gregory">
        Add IOUtils method to copy output stream to input stream #281.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathUtils.isPosix(Path, LinkOption...). #290
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathUtils.readAttributes(Path, Class, LinkOption...). #290
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add IOExceptionList.checkEmpty(List, Object).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add IOBiConsumer, IOTriConsumer, IOComparator, IOUnaryOperator, IOBinaryOperator.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and reuse IOConsumer forAll(*), forEach(*), and forEachIndexed(*).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add CharsetEncoders.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add CharsetDecoders.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathUtils.createParentDirectories(Path, LinkOption, FileAttribute...).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Update FileEntry to use FileTime instead of long for file time stamps.
      </action>
      <action issue="IO-680" dev="ggregory" type="add" due-to="XenoAmess, sebbASF, Gary Gregory">
        Add more tests for IOUtils.contentEqualsIgnoreEOL #137.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Reduce boilerplate through new UncheckedIO class and friends in org.apache.commons.io.function.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathUtils.touch(Path).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add FileSystem.getIllegalFileNameCodePoints().
      </action>
      <action dev="ggregory" type="add" due-to="Isira Seneviratne, Gary Gregory">
        Add FileUtils.isFileNewer(File, ChronoLocalDate, OffsetTime).
        Add FileUtils.isFileNewer(File, OffsetDateTime).
        Add FileUtils.isFileOlder(File, ChronoLocalDate, OffsetTime).
        Add FileUtils.isFileOlder(File, OffsetDateTime).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add IOBiConsumer.noop().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add IOUtils.closeQuietly(Iterable&lt;Closeable&gt;).
        Add IOUtils.closeQuietly(Stream&lt;Closeable&gt;).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add Charsets.toCharset(Charset, Charset).
        Add Charsets.toCharset(String, Charset).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add XmlStreamWriter(OutputStream, Charset).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathUtils.getLastModifiedFileTime(*).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add IOBiFunction, IOTriFunction, IOQuadFunction, IOPredicate, IOIterator, IOSpliterator, IOBaseStream, IOStream, FilesUncheck.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add IOUtils.consume(Reader).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add IOSupplier.asSupplier().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add IOFunction.asFunction().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add IOConsumer.asConsumer().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add TimestampedObserver.isClosed().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        IOExceptionList implements Iterable.
      </action>
      <action issue="IO-784" dev="ggregory" type="add" due-to="Fredrik Kjellberg, Gary Gregory">
        Add support for Appendable to HexDump #418.
      </action>
      <action dev="ggregory" type="add" due-to="DaGeRe, Gary Gregory">
        Add and use ThreadUtils.
      </action>
      <action issue="IO-786" dev="ggregory" type="add" due-to="Gary Gregory">
        Add UnsynchronizedFilterInputStream.
      </action>
      <action issue="IO-786" dev="ggregory" type="add" due-to="Gary Gregory, Benoit Tellier">
        Add UnsynchronizedBufferedInputStream.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add FileSystem.getBlockSize().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add builders and avoid creating more constructors for all permutations of current options.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory, maxxedev">
        Refactor using new Supplier API IOUtils.toString(IOSupplier&lt;InputStream&gt;, Charset[, IOSupplier&lt;String&gt;]).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory, maxxedev">
        Refactor using new Supplier API org.apache.commons.io.file.PathUtils.copy(IOSupplier&lt;InputStream&gt;, Path, CopyOption...).
      </action>
      <!-- UPDATE -->
      <action dev="kinow" type="update" due-to="Dependabot, Gary Gregory">
        Bump actions/cache from 2.1.6 to 3.0.10 #307, #337, #393.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump actions/checkout from 2.3.4 to 3.1.0 #286, #298, #330, #392.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump actions/setup-java from 2 to 3.6.0 #346, #397.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump github/codeql-action from 1 to 2 #353.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump Maven Javadoc plugin from 3.2.0 to 3.4.1.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump spotbugs-maven-plugin from 4.2.3 to 4.7.3.0 #250, #259, #272, #274, #285, #288, #289, #305, #315, #326, #338, #360, #366, #370, #380, #395, #403.
      </action>
      <action dev="kinow" type="update" due-to="Gary Gregory, Dependabot">
        Bump spotbugs from 4.5.2 to 4.7.3 #313, #317, #357, #382, #398.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump JUnit from 5.7.2 to 5.8.2.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump maven-enforcer-plugin from 3.0.0-M3 to 3.3.0 #255, #363, #431, #446.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump checkstyle from 8.44 to 9.3 #256, #257, #266, #279, #292. #308.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump junit-bom from 5.8.0-M1 to 5.9.1 #260, #271, #275, #309, #386.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump mockito-inline from 3.11.2 to 4.11.0 #262, #264, #282, #306, #314, #331, #348, #359, #381, #399, #405, #414, #420.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump jmh.version from 1.32 to 1.36 #258, #316, #342, #404.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump moditect-maven-plugin from 1.0.0.RC1 to 1.0.0.Final #280, #439, #445.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot, Gary Gregory">
        Bump junit-pioneer from 1.4.2 to 1.9.1 #304. #335, #362, #402, #406, #409.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump japicmp-maven-plugin from 0.15.3 to 0.16.0.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Bump commons-parent from 52 to 57 #388, #415, #421, #184.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump jacoco-maven-plugin from 0.8.7 to 0.8.8.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump maven-antrun-plugin from 3.0.0 to 3.1.0 #354.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump commons.surefire.version 3.0.0-M5 to 3.0.0-M7.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump PMD from 6.44.0 to 6.52.0.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump maven-pmd-plugin from 3.16.0 to 3.19.0.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump apache-rat from 0.13 to 0.14.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump exec-maven-plugin from 3.0.0 to 3.1.0 #369.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump maven-checkstyle-plugin from 3.1.2 to 3.2.0 #376.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump apache-rat-plugin from 0.14 to 0.15 #387.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump default buffer size for CharSequenceInputStream to IOUtils#DEFAULT_BUFFER_SIZE.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump default buffer size for ChunkedOutputStream to IOUtils#DEFAULT_BUFFER_SIZE.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump default buffer size for ChunkedWriter to IOUtils#DEFAULT_BUFFER_SIZE.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump default buffer size for ReaderInputStream to IOUtils#DEFAULT_BUFFER_SIZE.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump default buffer size for WriterOutputStream to IOUtils#DEFAULT_BUFFER_SIZE.
      </action>
    </release>
    <release version="2.11.0" date="2021-07-09" description="Java 8 is required.">
      <!-- FIX -->
      <action issue="IO-741" dev="ggregory" type="fix" due-to="Zach Sherman">
        FileUtils.listFiles does not list matching files if File parameter is a symbolic link.
      </action>
      <action issue="IO-724" dev="ggregory" type="fix" due-to="liran2000">
        FileUtils#deleteDirectory(File) exception Javadoc inaccurate update #245.
      </action>
      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
        Minor changes #243.
      </action>
      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
        Replace construction of FileInputStream and FileOutputStream objects with Files NIO APIs. #221.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix IndexOutOfBoundsException in IOExceptionList constructors.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Remove IOException from the method signatures that no longer throw IOException.
        This maintains binary compatibility but not source compatibility.
        - FilenameUtils
            directoryContains(String, String)
        - BoundedReader
            BoundedReader(java.io.Reader, int)
        - IOUtils
            lineIterator(java.io.InputStream, Charset)
            lineIterator(java.io.InputStream, String)
            toByteArray(String)
            toInputStream(CharSequence, String)
            toInputStream(String, String)
            toString(byte[])
            toString(byte[], String)
      </action>
      <!-- ADD -->
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Add SymbolicLinkFileFilter.
      </action>
      <action dev="ggregory" type="update" due-to="trncate">
        Add test to make sure the setter of AndFileFilter works correctly #244.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Add XmlStreamReader(Path).
      </action>
      <!-- UPDATE -->
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump mockito-inline from 3.11.0 to 3.11.2 #247.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump jmh.version from 1.27 to 1.32 #237.
      </action>
    </release>
    <!-- The release date is the date RC is cut -->
    <release version="2.10.0" date="2021-06-10" description="Java 8 is required.">
      <!-- FIX -->
      <action issue="IO-733" dev="ggregory" type="fix" due-to="Jim Sellers, Gary Gregory">
        RegexFileFilter uses the path and file name instead of just the file name.
      </action>
      <action issue="IO-734" dev="ggregory" type="fix" due-to="Eric Norman">
        The OSGi manifest now contains sun.* import packages #239.
      </action>
      <action issue="IO-585" dev="ggregory" type="fix" due-to="Adam McClenaghan">
        Sanitize double slash after prefix #79.
      </action>
      <!-- ADD -->
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and use RegexFileFilter.toString().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and use RegexFileFilter.RegexFileFilter(Pattern, Function&lt;Path&gt;, String>)
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and use IOCase.isCaseSensitive(IOCase).
      </action>
      <!-- UPDATES -->
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump actions/cache from 2.1.5 to 2.1.6 #238.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump junit-pioneer from 1.4.1 to 1.4.2 #240.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump checkstyle from 8.42 to 8.44 #241, #248.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump mockito-inline from 3.10.0 to 3.11.0 #242.
      </action>
    </release>
    <release version="2.9.0" date="2021-05-22" description="Java 8 is required.">
      <!-- FIX -->
      <action issue="IO-686" dev="ggregory" type="fix" due-to="Alan Moffat, Gary Gregory">
        IOUtils.toByteArray(InputStream) Javadoc does not match code.
      </action>
      <action issue="IO-689" dev="aherbert" type="fix" due-to="Uwe Schindler">
        FileUtils: Remove Instant->ZonedDateTime->Instant round-trip.
      </action>
      <action dev="ggregory" type="fix" due-to="Michael Ernst, Gary Gregory">
        Make FilenameUtils.equals() not throw an exception #154.
      </action>
      <action dev="ggregory" type="fix" due-to="Jan Peter Stotz, Bernd Eckenfels, Gary Gregory">
        Un-deprecate IOUtils.closeQuietly() methods.
      </action>
      <action dev="ggregory" type="fix" due-to="Michiel Kalkman">
        FileUtils#copyDirectory(File, File, FileFilter, preserveFileDate) clean up #163.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        AccumulatorPathVisitor does not track directories properly.
      </action>
      <action issue="IO-597" dev="ggregory" type="fix" due-to="Gary Gregory, Arvind, Rob Spoor">
        FileUtils.iterateFiles runs out of memory when executed for a directory with large number of files.
        Re-implement FileUtils' iterateFiles(), iterateFilesAndDirs(), listFiles(), listFilesAndDirs() to use NIO
        file tree walking instead of IO file listings to avoid memory consumption issues on large file trees.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        FileUtils.forceDelete(File) actually forces deletion of read-only files as it did in version 2.6.
      </action>
      <action issue="IO-692" dev="ebourg" type="fix" due-to="Matthew Rooney, Emmanuel Bourg">
        PathUtils.deleteFile() no longer throws a NoSuchFileException when applied on a symbolic link pointing
        to a file that doesn't exist.
      </action>
      <action issue="IO-694" dev="ggregory" type="fix" due-to="Tan Yee Fan, Gary Gregory">
        Behavior change in FileUtils.copyDirectory() file last modified timestamp preservation. Match Javadoc to code.
      </action>
      <action issue="IO-600" dev="ggregory" type="fix" due-to="Abhyankar Chaubey, Gary Gregory">
        Fix getPrefixLength method for Linux filename #179.
      </action>
      <action issue="IO-699" dev="ggregory" type="fix" due-to="tza, Gary Gregory">
        Wrong logging in FileUtils.setLastModified.
      </action>
      <action issue="IO-686" dev="ggregory" type="fix" due-to="Alan Moffat, Sebb, Gary Gregory">
        IOUtils.toByteArray(InputStream) Javadoc does not match code.
      </action>
      <action issue="IO-688" dev="ggregory" type="fix" due-to="Michael Ernst, Gary Gregory">
        CopyUtils deprecation message gives wrong version.
      </action>
      <action issue="IO-701" dev="ggregory" type="fix" due-to="Gary Gregory">
        Make PathUtils.setReadOnly deal with LinuxDosFileAttributeView #186.
      </action>
      <action issue="IO-702" dev="ggregory" type="fix" due-to="Boris Unckel, Gary Gregory">
        FileUtils.forceDelete does not delete invalid links. #187.
      </action>
      <action issue="IO-690" dev="ggregory" type="fix" due-to="Chris Heisterkamp, Gary Gregory">
        IOUtils.toByteArray(null) no longer throws a NullPointerException.
      </action>
      <action issue="IO-705" dev="ggregory" type="fix" due-to="Hao Zhong, Gary Gregory">
        MarkShieldInputStream#reset should throw UnsupportedOperationException.
      </action>
      <action issue="IO-705" dev="ggregory" type="fix" due-to="Hao Zhong, Gary Gregory">
        LockableFileWriter.close() should fail when the lock file cannot be deleted.
      </action>
      <action issue="IO-705" dev="ggregory" type="fix" due-to="Hao Zhong, Gary Gregory">
        Fix infinite loops in ObservableInputStream read(*) when an exception is caught but not re-thrown.
      </action>
      <action issue="IO-719" dev="ggregory" type="fix" due-to="Andrew Shcheglov, Gary Gregory">
        Fixed error of copying directories between different file systems #203.
      </action>
      <action dev="ggregory" type="fix" due-to="Felix Rilling">
        Fix Typos in JavaDoc, Comments and Tests #201.
      </action>
      <action issue="IO-718" dev="ggregory" type="fix" due-to="Robert Cooper, Gary Gregory">
        FileUtils.checksumCRC32 and FileUtils.checksum are not thread safe.
      </action>
      <action issue="IO-720" dev="ggregory" type="fix" due-to="XenoAmess">
        Fix error about usage of DirectBuffer in JRE 16/17 #205.
      </action>
      <action dev="ggregory" type="fix" due-to="Rob Spoor, Gary Gregory">
        Prevent infinite loop with AbstractCharacterFilterReader if EOF is filtered out #226.
      </action>
      <action issue="IO-429" dev="ggregory" type="fix" due-to="Ivan Leskin, Ivan Leskin">
        Check for long streams in IOUtils.toByteArray #175.
      </action>
      <!-- ADD -->
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add FileSystemProviders class.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Let org.apache.commons.io.filefilter classes work with java.nio.file.Files.walk* APIs.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Let org.apache.commons.io.filefilter classes work with java.nio.file.Files#newDirectoryStream(Path, DirectoryStream.Filter).
      </action>
      <action issue="IO-510" dev="ggregory" type="add" due-to="Gary Gregory, Apache Spark, David Mollitor">
        Add and adapt ReadAheadInputStream and BufferedFileChannelInputStream from Apache Spark.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathUtils.createParentDirectories(Path, FileAttribute...).
      </action>
      <action dev="ggregory" type="add" due-to="Rob Spoor, Gary Gregory">
        Add factory methods to CloseShieldInputStream, CloseShieldReader, CloseShieldOutputStream, CloseShieldWriter, #173.
      </action>
      <action dev="ggregory" type="add" due-to="maxxedev, Gary Gregory">
        Add QueueInputStream and QueueOutputStream as simpler alternatives to PipedInputStream and PipedOutputStream #171.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add StandardLineSeparator.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Replace magic numbers with constants with the new IOUtils.CR and LF.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add FileSystem#supportsDriveLetter().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add FileUtils.delete(File).
      </action>
      <action issue="IO-700" dev="ggregory" type="add" due-to="Gary Gregory">
        Add FileUtils.moveFile(File, File, CopyOption...) #185.
      </action>
      <action issue="IO-700" dev="ggregory" type="add" due-to="Gary Gregory">
        Add FileUtils.isEmptyDirectory(File).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add FileUtils.lastModified[Unchecked](File) to workaround https://bugs.openjdk.java.net/browse/JDK-8177809.
      </action>
      <action issue="IO-709" dev="ggregory" type="add" due-to="Boris Unckel, Gary Gregory">
        Add null safe variants of isDirectory and isRegularFile.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and use IOExceptionList(String, List).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and use ObservableInputStream.ObservableInputStream(InputStream, Observer...).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Make ObservableInputStream.getObservers() public.
      </action>
      <action  issue="IO-706" dev="ggregory" type="add" due-to="Gary Gregory">
        Add TimestampedObserver.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add and use IOUtils.byteArray(*).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Make public and reuse IOUtils.EMPTY_BYTE_ARRAY.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add IOUtils.copy(URL, File).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add copy(URL, OutputStream).
      </action>
      <action issue="IO-651" dev="ggregory" type="add" due-to="jmark109, Gary Gregory">
        Add DeferredFileOutputStream.toInputStream() #206.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add CharacterSetFilterReader.CharacterSetFilterReader(Reader, Integer...).
      </action>
      <action dev="ggregory" type="add" due-to="Rob Spoor, Gary Gregory">
        Add AbstractCharacterFilterReader(Reader, IntPredicate), #227.
        Add CharacterFilterReader(Reader, IntPredicate), #227.
        Add CharacterFilterReaderIntPredicateTest, #227.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add IOConsumer.noop().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add constructor ThresholdingOutputStream(int, IOConsumer, IOFunction) and make the class concrete.
      </action>
      <action dev="ggregory" type="add" due-to="nstdspace, Gary Gregory">
        Add constructor accepting collection of file alteration observers #236.
      </action>
      <!-- UPDATES -->
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update junit-jupiter from 5.6.2 to 5.7.0 #153.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update mockito-core from 3.5.9 to 3.10.0, #152, #155, #157, #166, #167, #169, #182.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump mockito-inline from 3.7.0 to 3.10.0 #188, #207, #230.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update commons.jacoco.version 0.8.5 to 0.8.7, fixes Java 15 builds and up.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update spotbugs from 4.1.2 to 4.5.0, #158, #164, #165, #180, #199, #213, #224, #302.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump spotbugs-maven-plugin from 4.0.4 to 4.2.3, #161, #172, #223.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Update org.junit-pioneer:junit-pioneer 0.9.0 -> 1.4,1, #159, #162, #170, #189, #191, #210, #229.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update actions/checkout from v2.3.2 to v2.3.4, #156, #168.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump actions/setup-java from v1.4.2 to v2 #160.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update maven-surefire-plugin from 2.22.2 to 3.0.0-M5.
      </action>
      <action dev="ggregory" type="update" due-to="Arturo Bernal">
        Minor improvements, #176, 177, #190.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update commons.japicmp.version 0.14.4 -> 0.15.3.
      </action>
      <action dev="ggregory" type="update" due-to="Michiel Kalkman">
        Tiny performance improvement in FileUtils#moveDirectoryToDirectory() #174.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump checkstyle from 8.38 to 8.42 #689, #209, #225.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump maven-checkstyle-plugin from 3.1.1 to 3.1.2 #198.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump jimfs from 1.1 to 1.2 #183.
      </action>
      <action dev="ggregory" type="update" due-to="XenoAmess, Gary Gregory">
        Improve performance of IOUtils.contentEquals(InputStream, InputStream).
      </action>
      <action dev="ggregory" type="update" due-to="XenoAmess, Gary Gregory">
        Improve performance of IOUtils.contentEquals(Reader, Reader).
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump actions/cache from v2 to v2.1.5 #202, #228.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump junit-bom from 5.7.0 to 5.7.2 #200, #232.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Update from Apache Commons Lang 3.11 to 3.12.0.
      </action>
      <action type="update" dev="ggregory" due-to="Arturo Bernal">
        Minor improvements #233.
      </action>
      <action type="update" dev="ggregory" due-to="Arturo Bernal">
        Simplify Assertions in tests #234.
      </action>
    </release>
    <!-- The release date is the date RC is cut -->
    <release version="2.8.0" date="2020-09-05" description="Java 8 is 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="add" due-to="Gary Gregory">
        Add NullAppendable.
      </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 issue="IO-677" dev="ggregory" type="fix" due-to="Gary Gregory">
        FileSystem.getCurrent() does not return the correct enum.
      </action>
      <action issue="IO-679" dev="ggregory" type="fix" due-to="proneel">
        input.AbstractCharacterFilterReader passes count of chars read #132.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add PathUtils.getAclEntryList(Path).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Null-guard IOUtils.close(Closeable, IOConsumer).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add ReversedLinesFileReader.readLines(int).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add ReversedLinesFileReader.toString(int).
      </action>
      <action issue="IO-684" dev="ggregory" type="add" due-to="Gary Gregory, Robin Jansohn">
        Add PathUtils.delete(Path, DeleteOption...).
        Add PathUtils.deleteDirectory(Path, DeleteOption...).
        Add PathUtils.deleteFile(Path, DeleteOption...).
        Add PathUtils.setReadOnly(Path, boolean, LinkOption...).
        Add CleaningPathVisitor.CleaningPathVisitor(PathCounters, DeleteOption[], String...).
        Add DeletingPathVisitor.DeletingPathVisitor(PathCounters, DeleteOption[], String...).
      </action>
      <action issue="IO-683" dev="sebb" type="fix">
        CircularBufferInputStream.read() fails to convert byte to unsigned int
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix SpotBugs issues in org.apache.commons.io.FileUtils.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add RandomAccessFileInputStream.
      </action>
      <action issue="IO-681" dev="sebb" type="add">
        IOUtils.close(Closeable) should allow a list of closeables.
      </action>
      <action issue="IO-672" dev="sebb" type="fix">
        Copying a File sets last modified date to 01 January 1970.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add IOUtils.consume(InputStream).
      </action>
      <action issue="IO-676" dev="ggregory" type="add" due-to="Isira Seneviratne, Gary Gregory">
        Add isFileNewer() and isFileOlder() methods that support the Java 8 Date/Time API. #124.
      </action>
      <action issue="IO-676" dev="ggregory" type="fix" due-to="Michael Ernst, Gary Gregory">
        Prevent NullPointerException in ReversedLinesFileReader constructors #117.
      </action>
      <action dev="ggregory" type="add" due-to="Adam Retter, Gary Gregory">
        Add a MarkShieldInputStream #119.
      </action>
      <!-- UPDATES -->
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Deprecate IOUtils.LINE_SEPARATOR in favor of Java 7's System.lineSeparator().
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Replace FindBugs with SpotBugs.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        maven-checkstyle-plugin 3.1.0 -> 3.1.1.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from org.apache.commons:commons-lang3 3.10 to 3.11.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update commons-parent from 50 to 51 #129.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update actions/checkout from v1 to v2.3.1 #126.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update junit-pioneer from 0.6.0 to 0.9.0, #127, #135, #138.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update mockito-core from 3.3.3 to 3.5.9 #128, #133, #145, #149, #151.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update spotbugs from 4.0.6 to 4.6.0 #134, #332.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update actions/checkout from v2.3.1 to v2.3.2 #140.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update actions/setup-java from v1.4.0 to v1.4.2 #141, #148.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Update com.github.siom79.japicmp:japicmp-maven-plugin 0.14.3 -> 0.14.4.
      </action>
    </release>
    <!-- The release date is the date RC is cut -->
    <release version="2.7" date="2020-05-24" description="Java 8 is 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.Observer 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&lt;IOException&gt;).
        Add and reuse org.apache.commons.io.IOUtils.close(Closeable, IOConsumer&lt;IOException&gt;).
      </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 forever
         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 failure
      </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>
