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

    <release version="2.6" date="2017-10-15" description="Java 7 required, Java 9 supported.">
      <action issue="IO-553" dev="britter" type="update" due-to="Michael Ernst">
        Make code style of hasBOM() consistent with getBOMCharsetName()
      </action>
       <action issue="IO-546" dev="pschumacher" type="fix" due-to="Tomas Celaya">
        ClosedOutputStream#flush should throw
      </action>
      <action issue="IO-551" dev="britter" type="add">
        Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility
      </action>
      <action issue="IO-550" dev="kinow" type="fix" due-to="Jimi Adrian">
        Documentation issue, fix 404 Javadoc issues in the description page
      </action>
      <action issue="IO-542" dev="pschumacher" type="update" due-to="Ilmars Poikans">
        FileUtils#readFileToByteArray: optimize reading of files with known size
      </action>
      <action issue="IO-547" dev="ggregory" type="update" due-to="Nikhil Shinde, Michael Ernst, Gary Greory">
        Throw a IllegalArgumentException instead of NullPointerException in FileSystemUtils.freeSpaceWindows().
      </action>
      <action issue="IO-367" dev="pschumacher" type="add" due-to="James Sawle">
        Add convenience methods for copyToDirectory
      </action>
      <action issue="IO-442" dev="pschumacher" type="fix" due-to="Simon Robinson">
        Javadoc contradictory for FileFilterUtils.ageFileFilter(cutoff) and the filter it constructs: AgeFileFilter(cutoff)
      </action>
      <action issue="IO-534" dev="sebb" type="fix">
        FileUtilTestCase.testForceDeleteDir() should not delete testDirectory parent
      </action>
      <action issue="IO-528" dev="pschumacher" type="fix" due-to="Dave Moten">
        fix Tailer.run race condition runaway logging
      </action>
      <action issue="IO-483" dev="kinow" type="fix" due-to="Marko Vasic">
        getPrefixLength return -1 if Unix file contains colon
      </action>
      <action issue="IO-520" dev="pschumacher" type="fix">
        FileUtilsTestCase#testContentEqualsIgnoreEOL fails on Windows
      </action>
      <action issue="IO-516" dev="pschumacher" type="fix" due-to="Jason Pyeron">
        .gitattributes not correctly applied
      </action>
      <action issue="IO-515" dev="ggregory" type="fix" due-to="Brett Lounsbury, Gary Gregory">
        Allow Specifying Initial Buffer Size of DeferredFileOutputStream.
      </action>
      <action issue="IO-512" dev="ggregory" type="fix" due-to="Ralf Hauser">
        ThresholdingOutputStream.thresholdReached() results in FileNotFoundException.
      </action>
      <action issue="IO-511" dev="britter" type="fix" due-to="Ahmet Celik">
        After a few unit tests, a few newly created directories not cleaned completely.
      </action>
      <action issue="IO-502" dev="ggregory" type="fix" due-to="Christian Schulte">
        Exceptions are suppressed incorrectly when copying files.
      </action>
      <action issue="IO-503" dev="ggregory" type="fix">
        Update platform requirement to Java 7.
      </action>
      <action issue="IO-537" dev="ggregory" type="fix" due-to="Borys Zibrov">
        BOMInputStream shouldn't sort array of BOMs in-place.
      </action>
      <action issue="IO-506" dev="ggregory" type="update" due-to="Christian Schulte">
        Deprecate methods FileSystemUtils.freeSpaceKb().
      </action>
      <action issue="IO-505" dev="ggregory" type="update" due-to="Christian Schulte">
        Make LineIterator implement Closeable to support try-with-resources statements.
      </action>
      <action issue="IO-504" dev="ggregory" type="update" due-to="Christian Schulte">
        Deprecated of all IOUtils.closeQuietly() methods and use try-with-resources internally.
      </action>
      <action issue="IO-493" dev="pschumacher" type="add" due-to="Piotr Turski">
        Add infinite circular input stream
      </action>
      <action issue="IO-507" dev="ggregory" type="add">
        Add a ByteOrderParser class.
      </action>
      <action issue="IO-518" dev="jochen" type="add">
        Add ObservableInputStream
      </action>
      <action issue="IO-519" dev="jochen" type="add">
        Add MessageDigestCalculatingInputStream
      </action>
      <action issue="IO-513" dev="ggregory" type="add" due-to="Behrang Saeedzadeh">
        Add convenience methods for reading class path resources.
      </action>
      <action issue="IO-514" dev="pschumacher" type="remove">
        Remove org.apache.commons.io.Java7Support
      </action>
      <action issue="IO-567" dev="jochen" type="fix">
        Implement special case handling for NTFS ADS names: FilenameUtils.getExtension(String),
        and FilenameUtils.indexOfExtension(String) are now throwing an IllegalArgumentException,
        if the file name in question appears to identify an alternate data stream (Windows only).
      </action>
    </release>

    <release version="2.5" date="2016-04-22" description="New features and bug fixes.">
      <action issue="IO-492" dev="ggregory" type="fix" due-to="Santiago Castro">
        Typo: In an IOUtils.java comment it says "focussed" instead of "focused".
      </action>
      <action issue="IO-433" dev="krosenvold" type="update">
        Converted all test cases to JUnit 4
      </action>
      <action issue="IO-487" dev="bdelacretaz" type="add">
        Add ValidatingObjectInputStream for controlled deserialization
      </action>
      <action issue="IO-446" dev="krosenvold" type="fix" due-to="Jeffrey Barrus">
        adds an endOfFileReached method to the TailerListener
      </action>
      <action issue="IO-484" dev="krosenvold" type="fix" due-to="Philippe Arteau">
        FilenameUtils should handle embedded null bytes
      </action>
      <action issue="IO-481" dev="krosenvold" type="fix">
        Changed/Corrected algorithm for waitFor
      </action>
      <action issue="IO-471" dev="krosenvold" type="add" due-to="Leandro Reis">
        Support for additional encodings in ReversedLinesFileReader
      </action>
      <action issue="IO-428" dev="krosenvold" type="fix" due-to="Stefan Gmeiner">
        BOMInputStream.skip returns wrong count if stream contains no BOM
      </action>
      <action issue="IO-425" dev="krosenvold" type="add" due-to="Craig Swank">
        Setter method for threshold on ThresholdingOutputStream
      </action>
      <action issue="IO-488" dev="krosenvold" type="fix" due-to="Björn Buchner">
        FileUtils.waitFor(...) swallows thread interrupted status
      </action>
      <action issue="IO-452" dev="krosenvold" type="fix" due-to="David Standish">
        Support for symlinks with missing target. Added support for JDK7 symlink features when present
      </action>
      <action issue="IO-466" dev="krosenvold" type="update">
        Added testcase to show this was fixed with IO-423
      </action>
      <action issue="IO-479" dev="sebb" type="update" due-to="Zhouce Chen">
        Correct exception message in FileUtils.getFile(File, String...)
      </action>
      <action issue="IO-406" dev="britter" type="add" due-to="Niall Pemberton">
        Introduce new class AppendableOutputStream
      </action>
      <action issue="IO-465" dev="britter" type="update" due-to="based2">
         Update to JUnit 4.12
      </action>
      <action issue="IO-462" dev="sebb" type="update">
         IOExceptionWithCause no longer needed
      </action>
      <action issue="IO-459" dev="olamy" type="add" due-to="Kristian Rosenvold">
        Add WindowsLineEndingInputStream and UnixLineEndingInputStream.
      </action>
      <action issue="IO-457" dev="olamy" type="add" due-to="Kristian Rosenvold">
        Add a BoundedReader, a wrapper that can be used to constrain access
        to an underlying stream when used with mark/reset -
        to avoid overflowing the mark limit of the underlying buffer.
      </action>
      <action issue="IO-453" dev="sebb" type="fix" due-to="Steven Christou">
         Regression in FileUtils.readFileToString from 2.0.1
      </action>
      <action issue="IO-451" dev="sebb" type="fix" due-to="David Standish">
         ant test fails - resources missing from test classpath
      </action>
      <action issue="IO-435" dev="tn" type="fix" due-to="Dominik Stadler">
         Document that FileUtils.deleteDirectory, directoryContains and cleanDirectory
         may throw an IllegalArgumentException in case the passed directory does not
         exist or is not a directory.
      </action>
      <action issue="IO-426" dev="ggregory" type="add">
         Add API IOUtils.closeQuietly(Closeable...)
      </action>
      <action issue="IO-424" dev="ggregory" type="fix" due-to="Ville Skyttä">
         Javadoc fixes, mostly to appease 1.8.0
      </action>
      <action issue="IO-422" dev="ggregory" type="update">
         Deprecate Charsets Charset constants in favor of Java 7's java.nio.charset.StandardCharsets
      </action>
      <action issue="IO-410" dev="sebb" type="add" due-to="Beluga Behr">
         Readfully() That Returns A Byte Array
      </action>
      <action issue="IO-395" dev="brentworden" type="add" due-to="Beluga Behr">
         Overload IOUtils buffer methods to accept buffer size
      </action>
      <action issue="IO-389" dev="sebb" type="fix" due-to="Austin Doupnik">
         FileUtils.sizeOfDirectory can throw IllegalArgumentException
      </action>
      <action issue="IO-390" dev="sebb" type="fix">
         FileUtils.sizeOfDirectoryAsBigInteger can overflow.
         Ensure that recursive calls all use BigInteger
      </action>
      <action issue="IO-382" dev="sebb" type="add">
         Chunked IO for large arrays.
         Added writeChunked(byte[], OutputStream) and writeChunked(char[] Writer)
         Added ChunkedOutputStream, ChunkedWriter
      </action>
      <action issue="IO-385" dev="sebb" type="fix">
         FileUtils.doCopyFile can potentially loop forever
         Exit loop if no data to copy
      </action>
      <action issue="IO-383" dev="sebb" type="fix">
         FileUtils.doCopyFile caches the file size; needs to be documented
         Added Javadoc; show file lengths in exception message
      </action>
      <action issue="IO-239" dev="sebb" type="update">
         Convert IOCase to a Java 1.5+ Enumeration
         [N.B. this is binary compatible]
      </action>
      <action issue="IO-233" dev="sebb" type="add">
         Add Methods for Buffering Streams/Writers To IOUtils
         Added overloaded buffer() methods - see also IO-330
      </action>
      <action issue="IO-330" dev="sebb" type="add">
         IOUtils#toBufferedOutputStream/toBufferedWriter to conditionally wrap the output
         Added overloaded buffer() methods - see also IO-233
      </action>
      <action issue="IO-381" dev="ggregory" type="add">
        Add FileUtils.copyInputStreamToFile API with option to leave the source open.
        See copyInputStreamToFile(final InputStream source, final File destination, boolean closeSource)
      </action>
      <action issue="IO-380" dev="sebb" type="fix" due-to="claudio_ch">
        FileUtils.copyInputStreamToFile should document it closes the input source
      </action>
      <action issue="IO-279" dev="sebb" type="fix">
        Tailer erroneously considers file as new.
        Fix to use file.lastModified() rather than System.currentTimeMillis()
      </action>
      <action issue="IO-356" dev="sebb" type="fix">
         CharSequenceInputStream#reset() behaves incorrectly in case when buffer size is not dividable by data size.
         Fix code so skip relates to the encoded bytes; reset now re-encodes the data up to the point of the mark
      </action>
      <action issue="IO-379" dev="sebb" type="add">
         CharSequenceInputStream - add tests for available()
         Fix code so it really does reflect a minimum available.
      </action>
      <action issue="IO-328" dev="sebb" type="update">
        getPrefixLength returns null if filename has leading slashes
        Javadoc: add examples to show correct behavior; add unit tests
      </action>
      <action issue="IO-299" dev="sebb" type="update">
        FileUtils.listFilesAndDirs includes original dir in results even when it doesn't match filter
        Javadoc: clarify that original dir is included in the results
      </action>
      <action issue="IO-346" dev="sebb" type="add">
         Add ByteArrayOutputStream.toInputStream()
      </action>
      <action issue="IO-368" dev="sebb" type="fix">
        ClassLoaderObjectInputStream does not handle primitive typed members
      </action>
      <action issue="IO-341" dev="sebb" type="add">
         A constant for holding the BOM character (U+FEFF)
      </action>
      <action issue="IO-314" dev="sebb" type="fix">
        Deprecate all methods that use the default encoding
      </action>
      <action issue="IO-338" dev="sebb" type="fix">
        When a file is rotated, finish reading previous file prior to starting new one
      </action>
      <action issue="IO-354" dev="sebb" type="fix">
        Commons IO Tailer does not respect UTF-8 Charset.
      </action>
      <action issue="IO-323" dev="sebb" type="fix">
        What should happen in FileUtils.sizeOf[Directory] when an overflow takes place?
        Added Javadoc.
      </action>
      <action issue="IO-372" dev="sebb" type="fix">
        FileUtils.moveDirectory can produce misleading error message on failure
      </action>
      <action issue="IO-375" dev="sebb" type="update">
        FilenameUtils.splitOnTokens(String text) check for '**' could be simplified
      </action>
      <action issue="IO-374" dev="sebb" type="update">
        WildcardFileFilter ctors should not use null to mean IOCase.SENSITIVE when delegating to other ctors
      </action>
      <action issue="IO-362" dev="ggregory" type="fix" due-to="mmadson, ggregory">
        IOUtils.contentEquals* methods returns false if input1 == input2, should return true.
      </action>
      <action issue="IO-361" dev="ggregory" type="add">
        Add API FileUtils.forceMkdirsParent().
      </action>
      <action issue="IO-360" dev="ggregory" type="add">
        Add API Charsets.requiredCharsets().
      </action>
      <action issue="IO-359" dev="ggregory" type="add" due-to="yukoba">
        Add IOUtils.skip and skipFully(ReadableByteChannel, long).
      </action>
      <action issue="IO-358" dev="ggregory" type="add" due-to="yukoba">
        Add IOUtils.read and readFully(ReadableByteChannel, ByteBuffer buffer).
      </action>
      <action issue="IO-357" dev="ggregory" type="fix" due-to="mortenh">
        [Tailer] InterruptedException while the thread is sleeping is silently ignored
      </action>
      <action issue="IO-353" dev="ggregory" type="add" due-to="ggregory">
        Add API IOUtils.copy(InputStream, OutputStream, int)
      </action>
      <action issue="IO-349" dev="ggregory" type="add" due-to="scop">
        Add API with array offset and length argument to FileUtils.writeByteArrayToFile.
      </action>
      <action issue="IO-352" dev="ggregory" type="fix" due-to="scop">
        Spelling fixes.
      </action>
      <action issue="IO-348" dev="ggregory" type="add" due-to="plcstpierre">
        Missing information in IllegalArgumentException thrown by org.apache.commons.io.FileUtils#validateListFilesParameters.
      </action>
      <action issue="IO-345" dev="ggregory" type="add" due-to="mkresse">
        Supply a hook method allowing Tailer actively determining stop condition.
      </action>
      <action issue="IO-436" dev="ggregory" type="fix" due-to="christoph.schneegans">
        Improper Javadoc comment for FilenameUtils.indexOfExtension.
      </action>
      <action issue="IO-437" dev="ggregory" type="add">
        Make IOUtils.EOF public and reuse it in various classes.
      </action>
    </release>

    <release version="2.4" date="2012-06-12" description="New features and bug fixes.">
      <action issue="IO-343" dev="ggregory" type="fix" due-to="igorlash">
        org.apache.commons.io.comparator Javadoc is inconsistent with real code.
      </action>
      <action issue="IO-336" dev="ggregory" type="fix" due-to="rleavelle">
        Yottabyte (YB) incorrectly defined in FileUtils.
      </action>
      <action issue="IO-269" dev="ggregory" type="add" due-to="sebb">
        Tailer locks file from deletion/rename on Windows.
      </action>
      <action issue="IO-279" dev="sebb" type="fix" due-to="Sergio Bossa, Chris Baron">
        Tailer erroneously considers file as new.
      </action>
      <action issue="IO-335" dev="sebb" type="fix">
        Tailer#readLines - incorrect CR handling.
      </action>
      <action issue="IO-334" dev="sebb" type="fix">
        FileUtils.toURLs throws NPE for null parameter; document the behavior.
      </action>
      <action issue="IO-333" dev="ggregory" type="add" due-to="fmeschbe">
        Export OSGi packages at version 1.x in addition to 2.x.
      </action>
      <action issue="IO-320" dev="ggregory" type="add" due-to="ggregory">
        Add XmlStreamReader support for UTF-32.
      </action>
      <action issue="IO-331" dev="ggregory" type="add" due-to="ggregory">
        BOMInputStream wrongly detects UTF-32LE_BOM files as UTF-16LE_BOM files in method getBOM().
      </action>
      <action issue="IO-332" dev="ggregory" type="fix" due-to="liangly">
        Improve tailer's reading performance.
      </action>
      <action issue="IO-279" dev="ggregory" type="fix">
        Improve Tailer performance with buffered reads (see IO-332).
      </action>
      <action issue="IO-329" dev="ggregory" type="fix" due-to="tivv">
        FileUtils.writeLines uses unbuffered IO.
      </action>
      <action issue="IO-327" dev="ggregory" type="add" due-to="ggregory">
        Add byteCountToDisplaySize(BigInteger).
      </action>
      <action issue="IO-326" dev="ggregory" type="add" due-to="ggregory, kinow">
        Add new FileUtils.sizeOf[Directory] APIs to return BigInteger.
      </action>
      <action issue="IO-325" dev="ggregory" type="add" due-to="raviprak">
        Add IOUtils.toByteArray methods to work with URL and URI.
      </action>
      <action issue="IO-324" dev="ggregory" type="add" due-to="raviprak">
        Add missing Charset sister APIs to method that take a String charset name.
      </action>
      <action issue="IO-319" dev="ggregory" type="fix" due-to="raviprak">
        FileUtils.sizeOfDirectory follows symbolic links.
      </action>
    </release>

    <release version="2.3" date="2012-April-10" description="New features and bug fixes.">
      <action issue="IO-322" dev="ggregory" type="add" due-to="ggregory">
        Add and use class Charsets.
      </action>
      <action issue="IO-321" dev="ggregory" type="add" due-to="ggregory">
        ByteOrderMark UTF_32LE is incorrect.
      </action>
      <action issue="IO-318" dev="ggregory" type="add" due-to="ggregory">
        Add Charset sister APIs to method that take a String charset name.
      </action>
    </release>

    <release version="2.2" date="2012-March-26" description="New features and bug fixes.">
      <action issue="IO-313" dev="ggregory" type="add" due-to="ggregory">
        Add IOUtils.toBufferedReader(Reader)
      </action>
      <!-- Note: the issue was not raised by Manoj, but arose from IO-305 and tests he performed -->
      <action issue="IO-308" dev="sebb" type="add" due-to="Manoj Mokashi">
        Allow applications to provide buffer (or size) for copyLarge methods.
      </action>
      <action issue="IO-311" dev="sebb" type="fix" due-to="Robert Muir">
        IOUtils.read(InputStream/Reader) ignores the offset parameter
      </action>
      <action issue="IO-312" dev="sebb" type="fix">
        CharSequenceInputStream(CharSequence s, Charset charset, int bufferSize) ignores bufferSize
      </action>
      <action issue="IO-305" dev="sebb" type="add" due-to="Manoj Mokashi">
        New copyLarge() method in IOUtils that takes additional offset, length arguments
      </action>
      <action issue="IO-300" dev="sebb" type="fix">
        FileUtils.moveDirectoryToDirectory removes source directory if destination is a sub-directory
      </action>
      <action issue="IO-307" dev="sebb" type="fix">
        ReaderInputStream#read(byte[] b, int off, int len) should check for valid parameters
      </action>
      <action issue="IO-287" dev="bayard" type="add" due-to="Ron Kuris, Gary Gregory">
        Use terabyte (TB), petabyte (PB) and exabyte (EB) in FileUtils.byteCountToDisplaySize(long size)
      </action>
      <action issue="IO-306" dev="sebb" type="fix">
        ReaderInputStream#read(byte[] b, int off, int len) should always return 0 for length == 0
      </action>
      <action issue="IO-173" dev="sebb" type="add" due-to="Marcos Vinícius da Silva">
        FileUtils.listFiles() doesn't return directories
      </action>
      <action issue="IO-276" dev="sebb" type="fix" due-to="nkami">
        "FileUtils#deleteDirectoryOnExit(File)" does not work
      </action>
      <action issue="IO-273" dev="sebb" type="fix" due-to="sebb">
        BoundedInputStream.read() treats max differently from BoundedInputStream.read(byte[]...)
      </action>
      <action issue="IO-297" dev="sebb" type="add" due-to="Oleg Kalnichevski">
        CharSequenceInputStream to efficiently stream content of a CharSequence
      </action>
      <action issue="IO-296" dev="sebb" type="update" due-to="Oleg Kalnichevski">
        ReaderInputStream optimization: more efficient reading of small chunks of data
      </action>
      <action issue="IO-298" dev="sebb" type="fix" due-to="Christian Schulte">
        Various methods of class 'org.apache.commons.io.FileUtils' incorrectly suppress 'java.io.IOException'
      </action>
      <action issue="IO-304" dev="ggregory" type="add" due-to="liangly">
        The second constructor of Tailer class does not pass 'delay' to the third one
      </action>
      <action issue="IO-303" dev="ggregory" type="add" due-to="fabian.barney">
        TeeOutputStream does not call branch.close() when main.close() throws an exception
      </action>
      <action issue="IO-302" dev="ggregory" type="add" due-to="jsteuerwald, detinho">
        ArrayIndexOutOfBoundsException in BOMInputStream when reading a file without BOM multiple times
      </action>
      <action issue="IO-301" dev="ggregory" type="add" due-to="kaykay.unique">
        Add IOUtils.closeQuietly(Selector) necessary
      </action>
      <action issue="IO-292" dev="sebb" type="add" due-to="sebb">
        IOUtils.closeQuietly() should take a ServerSocket as a parameter
      </action>
      <action issue="IO-290" dev="sebb" type="add" due-to="sebb">
        Add read/readFully methods to IOUtils
      </action>
      <action issue="IO-288" dev="sebb" type="add" due-to="Georg Henzler">
        Supply a ReversedLinesFileReader
      </action>
      <action issue="IO-291" dev="ggregory" type="add" due-to="ggregory">
        Add new function FileUtils.directoryContains.
      </action>
      <action issue="IO-275" dev="sebb" type="add" due-to="CJ Aspromgos">
        FileUtils.contentEquals and IOUtils.contentEquals - Add option to ignore "line endings"
        Added contentEqualsIgnoreEOL methods to both classes
      </action>
    </release>

    <release version="2.1" date="2011-Sep-28" description="New features and bug fixes.">
      <action dev="ggregory" type="add" issue="IO-285" due-to="ggregory">
        Use standard Maven directory layout
      </action>
      <action dev="ggregory" type="add" issue="IO-284" due-to="ggregory">
        Add IOUtils API toString for URL and URI to get contents
      </action>
      <action dev="ggregory" type="add" issue="IO-282" due-to="ggregory">
        Add API FileUtils.copyFile(File input, OutputStream output)
      </action>
      <action dev="sebb" type="fix" issue="IO-280" due-to="sebb">
        Dubious use of mkdirs() return code
      </action>
      <action type="fix" issue="IO-277">
        ReaderInputStream enters infinite loop when it encounters an unmappable character
      </action>
      <action type="fix" issue="IO-264">
        FileUtils.moveFile() Javadoc should specify FileExistsException thrown
      </action>
      <action type="add" issue="IO-262">
        FileAlterationObserver has no getter for FileFilter
      </action>
      <action type="add" issue="IO-261">
        Add FileUtils.getFile API with varargs parameter
      </action>
      <action type="fix" issue="IO-260">
        ClassLoaderObjectInputStream does not handle Proxy classes
      </action>
      <action type="update" issue="IO-259">
        FileAlterationMonitor.stop(boolean allowIntervalToFinish)
      </action>
      <action type="add" issue="IO-182">
        Add new APPEND parameter for writing string into files
      </action>
      <action dev="sebb" type="fix" issue="IO-274" due-to="Frank Grimes">
        Tailer returning partial lines when reaching EOF before EOL
      </action>
      <action dev="sebb" type="fix" issue="IO-266" due-to="Igor Smereka">
        FileUtils.copyFile() throws IOException when copying large files to a shared directory (on Windows)
      </action>
      <action dev="sebb" type="fix" issue="IO-263" due-to="Gil Adam">
        FileSystemUtils.freeSpaceKb throws exception for Windows volumes with no visible files.
        Improve coverage by also looking for hidden files.
      </action>
      <action dev="sebb" type="add" issue="IO-251" due-to="Marco Albini">
        Add new read method "toByteArray" to handle InputStream with known size.
      </action>
    </release>

    <release version="2.0.1" date="2010-Dec-26">
      <action type="update">
        TODO: Convert RELEASE-NOTES.txt from 2.0.1?
      </action>
    </release>

    <release version="2.0" date="2010-Oct-18">
      <action type="update">
        TODO: Convert RELEASE-NOTES.txt from 2.0?
      </action>
    </release>

    <release version="1.4" date="2008-Jan-21">
      <action type="update">
        TODO: Convert RELEASE-NOTES.txt from 1.4?
      </action>
    </release>

    <release version="1.3.2" date="2007-Jul-02" description="Bug fixes.">
      <action dev="jochen" type="fix" issue="IO-115">
        Some tests, which are implicitly assuming a Unix-like file
        system, are now skipped on Windows.
      </action>
      <action dev="jochen" type="fix" issue="IO-116">
        Created the FileCleaningTracker, basically a non-static
        version of the FileCleaner, which can be controlled by
        the user.
      </action>
      <action dev="bayard" type="fix" issue="IO-117" due-to="Hiroshi Ikeda">
        EndianUtils - both readSwappedUnsignedInteger(...) methods could
        return negative numbers due to int/long casting.
      </action>
    </release>
  </body>
</document>
