<?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>
      <action dev="ggregory" type="fix"                due-to="Gary Gregory">Deprecate CountingInputStream in favor of BoundedInputStream.</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>
      <action dev="ggregory" type="add"                due-to="Gary Gregory">Add a running count and builder to BoundedInputStream.</action>
      <!--  UPDATE -->
      <action dev="ggregory" type="update"             due-to="Gary Gregory">Bump commons.bytebuddy.version from 1.14.10 to 1.14.12 #534, #592.</action>
      <action dev="ggregory" type="update"             due-to="Gary Gregory">Bump org.apache.commons:commons-parent from 65 to 67.</action>
      <action dev="ggregory" type="update"             due-to="Dependabot">Bump commons-codec:commons-codec from 1.16.0 to 1.16.1 #583.</action>
      <action dev="ggregory" type="update"             due-to="Dependabot">Bump org.codehaus.mojo:exec-maven-plugin from 3.1.1 to 3.2.0 #593.</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>
