<?xml version="1.0"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<!--
This file is used by the maven-changes-plugin to generate the release notes.
Useful ways of finding items to add to this file are:

1.  Add items when you fix a bug or add a feature (this makes the
release process easy :-).

2.  Do a Jira search for tickets closed since the previous release.

3.  Use the report generated by the maven-changelog-plugin to see all
CVS commits.  Set the project.properties' maven.changelog.range
property to the number of days since the last release.


To generate the release notes from this file:

mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn]

then tweak the source formatting if necessary and regenerate, then commit

The <action> type attribute can be add,update,fix,remove.
-->

<document>
  <properties>
    <title>Apache Commons IO Release Notes</title>
  </properties>

  <body>
    <release version="2.12.0" date="2021-MM-DD" description="Java 8 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>
      <!-- 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 StringInputStream.
      </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, 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>
      <!-- UPDATE -->
      <action dev="kinow" type="update" due-to="Dependabot, Gary Gregory">
        Bump actions/cache from 2.1.6 to 3.0.7 #307, #337.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump actions/checkout from 2.3.4 to 3 #286, #298, #330.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump actions/setup-java from 2 to 3 #346.
      </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.1.1 #250, #259, #272, #274, #285, #288, #289, #305, #315, #326, #338, #360, #366, #370.
      </action>
      <action dev="kinow" type="update" due-to="Gary Gregory, Dependabot">
        Bump spotbugs from 4.5.2 to 4.7.1 #313, #317, #357.
      </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.1.0 #255, #363.
      </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.0 #260, #271, #275, #309.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump mockito-inline from 3.11.2 to 4.7.0 #262, #264, #282, #306, #314, #331, #348, #359.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump jmh.version from 1.32 to 1.35 #258, #316, #342.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump moditect-maven-plugin from 1.0.0.RC1 to 1.0.0.RC2 #280.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot, Gary Gregory">
        Bump junit-pioneer from 1.4.2 to 1.7.1 #304. #335, #362.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump japicmp-maven-plugin from 0.15.3 to 0.15.7.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump commons-parent from 52 to 53.
      </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 implementation from 6.44.0 to 6.47.0.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump PMD plugin from 3.16.0 to 3.17.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>
    </release>
    <release version="2.11.0" date="2021-07-09" description="Java 8 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 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 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 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 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>
