xref: /aosp_15_r20/external/apache-commons-io/src/changes/changes.xml (revision 0c4d7b72e49a04598d65c566f44504b95342d75a)
1*0c4d7b72SSadaf Ebrahimi<?xml version="1.0"?>
2*0c4d7b72SSadaf Ebrahimi<!--
3*0c4d7b72SSadaf Ebrahimi Licensed to the Apache Software Foundation (ASF) under one or more
4*0c4d7b72SSadaf Ebrahimi contributor license agreements.  See the NOTICE file distributed with
5*0c4d7b72SSadaf Ebrahimi this work for additional information regarding copyright ownership.
6*0c4d7b72SSadaf Ebrahimi The ASF licenses this file to You under the Apache License, Version 2.0
7*0c4d7b72SSadaf Ebrahimi (the "License"); you may not use this file except in compliance with
8*0c4d7b72SSadaf Ebrahimi the License.  You may obtain a copy of the License at
9*0c4d7b72SSadaf Ebrahimi
10*0c4d7b72SSadaf Ebrahimi      http://www.apache.org/licenses/LICENSE-2.0
11*0c4d7b72SSadaf Ebrahimi
12*0c4d7b72SSadaf Ebrahimi Unless required by applicable law or agreed to in writing, software
13*0c4d7b72SSadaf Ebrahimi distributed under the License is distributed on an "AS IS" BASIS,
14*0c4d7b72SSadaf Ebrahimi WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15*0c4d7b72SSadaf Ebrahimi See the License for the specific language governing permissions and
16*0c4d7b72SSadaf Ebrahimi limitations under the License.
17*0c4d7b72SSadaf Ebrahimi-->
18*0c4d7b72SSadaf Ebrahimi
19*0c4d7b72SSadaf Ebrahimi<!--
20*0c4d7b72SSadaf EbrahimiThis file is used by the maven-changes-plugin to generate the release notes.
21*0c4d7b72SSadaf EbrahimiUseful ways of finding items to add to this file are:
22*0c4d7b72SSadaf Ebrahimi
23*0c4d7b72SSadaf Ebrahimi1.  Add items when you fix a bug or add a feature (this makes the
24*0c4d7b72SSadaf Ebrahimirelease process easy :-).
25*0c4d7b72SSadaf Ebrahimi
26*0c4d7b72SSadaf Ebrahimi2.  Do a Jira search for tickets closed since the previous release.
27*0c4d7b72SSadaf Ebrahimi
28*0c4d7b72SSadaf Ebrahimi3.  Use the report generated by the maven-changelog-plugin to see all
29*0c4d7b72SSadaf EbrahimiCVS commits.  Set the project.properties' maven.changelog.range
30*0c4d7b72SSadaf Ebrahimiproperty to the number of days since the last release.
31*0c4d7b72SSadaf Ebrahimi
32*0c4d7b72SSadaf Ebrahimi
33*0c4d7b72SSadaf EbrahimiTo generate the release notes from this file:
34*0c4d7b72SSadaf Ebrahimi
35*0c4d7b72SSadaf Ebrahimimvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn]
36*0c4d7b72SSadaf Ebrahimi
37*0c4d7b72SSadaf Ebrahimithen tweak the source formatting if necessary and regenerate, then commit
38*0c4d7b72SSadaf Ebrahimi
39*0c4d7b72SSadaf EbrahimiThe <action> type attribute can be add,update,fix,remove.
40*0c4d7b72SSadaf Ebrahimi-->
41*0c4d7b72SSadaf Ebrahimi
42*0c4d7b72SSadaf Ebrahimi<document xmlns="http://maven.apache.org/changes/1.0.0"
43*0c4d7b72SSadaf Ebrahimi          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
44*0c4d7b72SSadaf Ebrahimi          xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/xsd/changes-1.0.0.xsd">
45*0c4d7b72SSadaf Ebrahimi  <properties>
46*0c4d7b72SSadaf Ebrahimi    <title>Apache Commons IO Release Notes</title>
47*0c4d7b72SSadaf Ebrahimi  </properties>
48*0c4d7b72SSadaf Ebrahimi
49*0c4d7b72SSadaf Ebrahimi  <body>
50*0c4d7b72SSadaf Ebrahimi    <release version="2.15.0" date="2023-10-21" description="Java 8 is required.">
51*0c4d7b72SSadaf Ebrahimi      <!-- FIX -->
52*0c4d7b72SSadaf Ebrahimi      <action dev="sebb" type="fix" issue="IO-810" due-to="Laurence Gonsalves">
53*0c4d7b72SSadaf Ebrahimi        XmlStreamReader encoding match RE is too strict.
54*0c4d7b72SSadaf Ebrahimi      </action>
55*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" issue="IO-810" due-to="Gregor Dschung, Gary Gregory">
56*0c4d7b72SSadaf Ebrahimi        Javadoc in FileUtils does not reflect code for thrown exceptions.
57*0c4d7b72SSadaf Ebrahimi      </action>
58*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" issue="IO-812" due-to="Adam Rauch, Gary Gregory">
59*0c4d7b72SSadaf Ebrahimi        Javadoc should mention closing Streams based on file resources.
60*0c4d7b72SSadaf Ebrahimi      </action>
61*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" issue="IO-811" due-to="Adam Rauch, Gary Gregory">
62*0c4d7b72SSadaf Ebrahimi        In tests, Files.walk() direct and indirect callers fail to close the returned Stream.
63*0c4d7b72SSadaf Ebrahimi      </action>
64*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" issue="IO-811" due-to="Adam Rauch, Gary Gregory">
65*0c4d7b72SSadaf Ebrahimi        FileUtils.listFiles(File, String[], boolean) fails to close its internal Stream.
66*0c4d7b72SSadaf Ebrahimi      </action>
67*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" issue="IO-811" due-to="Adam Rauch, Gary Gregory">
68*0c4d7b72SSadaf Ebrahimi        FileUtils.iterateFiles(File, String[], boolean) fails to close its internal Stream.
69*0c4d7b72SSadaf Ebrahimi      </action>
70*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" issue="IO-811" due-to="Adam Rauch, Gary Gregory">
71*0c4d7b72SSadaf Ebrahimi        StreamIterator fails to close its internal Stream.
72*0c4d7b72SSadaf Ebrahimi      </action>
73*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" issue="IO-814" due-to="Elliotte Rusty Harold, Gary Gregory">
74*0c4d7b72SSadaf Ebrahimi        Don't throw UncheckedIOException #491.
75*0c4d7b72SSadaf Ebrahimi      </action>
76*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" issue="IO-414" due-to="Elliotte Rusty Harold, Gary Gregory">
77*0c4d7b72SSadaf Ebrahimi        Don't write a BOM on every (or any) line #492.
78*0c4d7b72SSadaf Ebrahimi      </action>
79*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" issue="IO-814" due-to="Gary Gregory">
80*0c4d7b72SSadaf Ebrahimi        RandomAccessFileMode.create(Path) provides a better NullPointerException message.
81*0c4d7b72SSadaf Ebrahimi      </action>
82*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
83*0c4d7b72SSadaf Ebrahimi        Improve performance of PathUtils.fileContentEquals(Path, Path, LinkOption[], OpenOption[]) by about 60%, see PathUtilsContentEqualsBenchmark.
84*0c4d7b72SSadaf Ebrahimi      </action>
85*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
86*0c4d7b72SSadaf Ebrahimi        Improve performance of PathUtils.fileContentEquals(Path, Path) by about 60%, see PathUtilsContentEqualsBenchmark.
87*0c4d7b72SSadaf Ebrahimi      </action>
88*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
89*0c4d7b72SSadaf Ebrahimi        Improve performance of FileUtils.contentEquals(File, File) by about 60%, see PathUtilsContentEqualsBenchmark.
90*0c4d7b72SSadaf Ebrahimi      </action>
91*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Elliotte Rusty Harold">
92*0c4d7b72SSadaf Ebrahimi        Remove unused test code #494.
93*0c4d7b72SSadaf Ebrahimi      </action>
94*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="sebbASF">
95*0c4d7b72SSadaf Ebrahimi        [Javadoc] IOUtils#contentEquals does not throw NullPointerException #496.
96*0c4d7b72SSadaf Ebrahimi      </action>
97*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
98*0c4d7b72SSadaf Ebrahimi        Fix CodeQL warnings in UnsynchronizedBufferedInputStream: Implicit narrowing conversion in compound assignment.
99*0c4d7b72SSadaf Ebrahimi      </action>
100*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
101*0c4d7b72SSadaf Ebrahimi        MessageDigestCalculatingInputStream.MessageDigestMaintainingObserver.MessageDigestMaintainingObserver(MessageDigest) now throws a NullPointerException
102*0c4d7b72SSadaf Ebrahimi        if the MessageDigest is null.
103*0c4d7b72SSadaf Ebrahimi      </action>
104*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
105*0c4d7b72SSadaf Ebrahimi        MessageDigestCalculatingInputStream.MessageDigestCalculatingInputStream(InputStream, MessageDigest) now throws a NullPointerException
106*0c4d7b72SSadaf Ebrahimi        if the MessageDigest is null.
107*0c4d7b72SSadaf Ebrahimi      </action>
108*0c4d7b72SSadaf Ebrahimi      <action issue="IO-816" dev="ggregory" type="fix" due-to="Andreas Loth, Gary Gregory">
109*0c4d7b72SSadaf Ebrahimi        UnsynchronizedBufferedInputStream.read(byte[], int, int) does not use buffer.
110*0c4d7b72SSadaf Ebrahimi      </action>
111*0c4d7b72SSadaf Ebrahimi      <!-- ADD -->
112*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
113*0c4d7b72SSadaf Ebrahimi        Add org.apache.commons.io.channels.FileChannels.
114*0c4d7b72SSadaf Ebrahimi      </action>
115*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
116*0c4d7b72SSadaf Ebrahimi        Add RandomAccessFiles#contentEquals(RandomAccessFile, RandomAccessFile).
117*0c4d7b72SSadaf Ebrahimi      </action>
118*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
119*0c4d7b72SSadaf Ebrahimi        Add RandomAccessFiles#reset(RandomAccessFile).
120*0c4d7b72SSadaf Ebrahimi      </action>
121*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
122*0c4d7b72SSadaf Ebrahimi        Add PathUtilsContentEqualsBenchmark.
123*0c4d7b72SSadaf Ebrahimi      </action>
124*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
125*0c4d7b72SSadaf Ebrahimi        Add org.apache.commons.io.StreamIterator.
126*0c4d7b72SSadaf Ebrahimi      </action>
127*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
128*0c4d7b72SSadaf Ebrahimi        Add MessageDigestInputStream and deprecate MessageDigestCalculatingInputStream.
129*0c4d7b72SSadaf Ebrahimi      </action>
130*0c4d7b72SSadaf Ebrahimi      <!-- UPDATE -->
131*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
132*0c4d7b72SSadaf Ebrahimi        Bump org.apache.commons:commons-parent from 62 to 64.
133*0c4d7b72SSadaf Ebrahimi      </action>
134*0c4d7b72SSadaf Ebrahimi    </release>
135*0c4d7b72SSadaf Ebrahimi    <release version="2.14.0" date="2023-09-24" description="Java 8 is required.">
136*0c4d7b72SSadaf Ebrahimi      <!-- FIX -->
137*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" issue="IO-799" due-to="Jeroen van der Vegt, Gary Gregory">
138*0c4d7b72SSadaf Ebrahimi        ReaderInputStream.read() throws an exception instead of returning -1 when called again after returning -1.
139*0c4d7b72SSadaf Ebrahimi      </action>
140*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" issue="IO-804" due-to="Elliotte Rusty Harold, Gary Gregory">
141*0c4d7b72SSadaf Ebrahimi        FileUtils.forceMkdirParent() Javadoc is incorrect.
142*0c4d7b72SSadaf Ebrahimi      </action>
143*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="step-security-bot, Gary Gregory">
144*0c4d7b72SSadaf Ebrahimi        [StepSecurity] ci: Harden GitHub Actions #461.
145*0c4d7b72SSadaf Ebrahimi      </action>
146*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
147*0c4d7b72SSadaf Ebrahimi        MagicNumberFileFilter.accept(Path, BasicFileAttributes) doesn't set its byteOffset before reading.
148*0c4d7b72SSadaf Ebrahimi      </action>
149*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
150*0c4d7b72SSadaf Ebrahimi        Javadoc improvements.
151*0c4d7b72SSadaf Ebrahimi      </action>
152*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Josh Soref, Gary Gregory">
153*0c4d7b72SSadaf Ebrahimi        Spelling #468.
154*0c4d7b72SSadaf Ebrahimi      </action>
155*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Jakub Kupczyk">
156*0c4d7b72SSadaf Ebrahimi        Use assertThrows #475.
157*0c4d7b72SSadaf Ebrahimi      </action>
158*0c4d7b72SSadaf Ebrahimi      <!-- ADD -->
159*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
160*0c4d7b72SSadaf Ebrahimi        Add DeferredFileOutputStream.getPath().
161*0c4d7b72SSadaf Ebrahimi      </action>
162*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
163*0c4d7b72SSadaf Ebrahimi        Add FileCleaningTracker.track(Path, Object[, FileDeleteStrategy]).
164*0c4d7b72SSadaf Ebrahimi      </action>
165*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
166*0c4d7b72SSadaf Ebrahimi        Add IOUtils.skip[Fully](InputStream, long, Supplier&lt;byte[]&gt;).
167*0c4d7b72SSadaf Ebrahimi      </action>
168*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
169*0c4d7b72SSadaf Ebrahimi        Add FilesUncheck.find(Path, int, BiPredicate%lt;Path, BasicFileAttributes&gt;, FileVisitOption...)
170*0c4d7b72SSadaf Ebrahimi      </action>
171*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
172*0c4d7b72SSadaf Ebrahimi        Add IOIntSupplier.
173*0c4d7b72SSadaf Ebrahimi      </action>
174*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
175*0c4d7b72SSadaf Ebrahimi        Add IOLongSupplier.
176*0c4d7b72SSadaf Ebrahimi      </action>
177*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
178*0c4d7b72SSadaf Ebrahimi        Add Uncheck.getAsInt(IOIntSupplier [, Supplier&lt;String&gt;]).
179*0c4d7b72SSadaf Ebrahimi      </action>
180*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
181*0c4d7b72SSadaf Ebrahimi        Add Uncheck.getAsLong(IOLongSupplier [, Supplier&lt;String&gt;]).
182*0c4d7b72SSadaf Ebrahimi      </action>
183*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
184*0c4d7b72SSadaf Ebrahimi        Add Uncheck.run(IORunnable, Supplier&lt;String&gt;)
185*0c4d7b72SSadaf Ebrahimi      </action>
186*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
187*0c4d7b72SSadaf Ebrahimi        Add Uncheck.get(IOSupplier, Supplier&lt;String&gt;)
188*0c4d7b72SSadaf Ebrahimi      </action>
189*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
190*0c4d7b72SSadaf Ebrahimi        IOFileFilter now also extends java.nio.file.PathMatcher.
191*0c4d7b72SSadaf Ebrahimi      </action>
192*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
193*0c4d7b72SSadaf Ebrahimi        Add PathMatcherFileFilter to adapt java.nio.file.PathMatcher.
194*0c4d7b72SSadaf Ebrahimi      </action>
195*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
196*0c4d7b72SSadaf Ebrahimi        Add ThresholdingOutputStream.getOutputStream() and deprecate getStream().
197*0c4d7b72SSadaf Ebrahimi      </action>
198*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
199*0c4d7b72SSadaf Ebrahimi        Add DeferredFileOutputStream.Builder.setOutputFile(Path).
200*0c4d7b72SSadaf Ebrahimi      </action>
201*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
202*0c4d7b72SSadaf Ebrahimi        Add DeferredFileOutputStream.Builder.setDirectory(Path).
203*0c4d7b72SSadaf Ebrahimi      </action>
204*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
205*0c4d7b72SSadaf Ebrahimi        Add AbstractStreamBuilder.setBufferSizeChecker(IntToIntFunction).
206*0c4d7b72SSadaf Ebrahimi      </action>
207*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
208*0c4d7b72SSadaf Ebrahimi        Add AbstractStreamBuilder.setBufferSizeMax(int).
209*0c4d7b72SSadaf Ebrahimi      </action>
210*0c4d7b72SSadaf Ebrahimi      <!-- UPDATE -->
211*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
212*0c4d7b72SSadaf Ebrahimi        Bump jimfs from 1.2 to 1.3.0 #465 (tests).
213*0c4d7b72SSadaf Ebrahimi      </action>
214*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
215*0c4d7b72SSadaf Ebrahimi        Bump commons-parent from 58 to 62.
216*0c4d7b72SSadaf Ebrahimi      </action>
217*0c4d7b72SSadaf Ebrahimi      <action type="update" dev="ggregory" due-to="Gary Gregory">
218*0c4d7b72SSadaf Ebrahimi        Bump commons-lang3 from 3.12 to 3.13.0.
219*0c4d7b72SSadaf Ebrahimi      </action>
220*0c4d7b72SSadaf Ebrahimi    </release>
221*0c4d7b72SSadaf Ebrahimi    <release version="2.13.0" date="2023-06-03" description="Java 8 is required.">
222*0c4d7b72SSadaf Ebrahimi      <!-- FIX -->
223*0c4d7b72SSadaf Ebrahimi      <action issue="IO-791" dev="ggregory" type="fix" due-to="Chad Wilson, Gary Gregory">
224*0c4d7b72SSadaf Ebrahimi        Regression in FileUtils.touch() - no longer creates parent directories.
225*0c4d7b72SSadaf Ebrahimi      </action>
226*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
227*0c4d7b72SSadaf Ebrahimi        ByteArrayOrigin should be able convert a byte[] to a ByteArrayInputStream.
228*0c4d7b72SSadaf Ebrahimi      </action>
229*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
230*0c4d7b72SSadaf Ebrahimi        AbstractOriginSupplier.checkOrigin() now throws IllegalStateException instead of NullPointerException.
231*0c4d7b72SSadaf Ebrahimi      </action>
232*0c4d7b72SSadaf Ebrahimi      <action issue="IO-796" dev="ggregory" type="fix" due-to="Giacomo Boccardo, Gary Gregory">
233*0c4d7b72SSadaf Ebrahimi        FileAlreadyExistsException in PathUtils.createParentDirectories(Path, LinkOption, FileAttribute...).
234*0c4d7b72SSadaf Ebrahimi      </action>
235*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
236*0c4d7b72SSadaf Ebrahimi        Only read the relevant portion of a file in AbstractOrigin.FileOrigin.getByteArray(long, int).
237*0c4d7b72SSadaf Ebrahimi      </action>
238*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
239*0c4d7b72SSadaf Ebrahimi        Only read the relevant portion of a file in AbstractOrigin.PathOrigin.getByteArray(long, int).
240*0c4d7b72SSadaf Ebrahimi      </action>
241*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Shai Shapira, Gary Gregory" issue="IO-798">
242*0c4d7b72SSadaf Ebrahimi        DeferredFileOutputStream throws exception when system temp dir is a symlink.
243*0c4d7b72SSadaf Ebrahimi      </action>
244*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
245*0c4d7b72SSadaf Ebrahimi        ReaderInputStream.Builder.setCharsetEncoder(null) should reset to a default object, not throw an NPE.
246*0c4d7b72SSadaf Ebrahimi      </action>
247*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
248*0c4d7b72SSadaf Ebrahimi        ReaderInputStream.Builder.setCharset(null) should reset to a default object, not throw an NPE.
249*0c4d7b72SSadaf Ebrahimi      </action>
250*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" issue="IO-800" due-to="Jan Høydahl, Gary Gregory">
251*0c4d7b72SSadaf Ebrahimi        Fix back-incompatible change for PathUtils.deleteDirectory(): throw NoSuchFileException instead of IllegalArgumentException #459.
252*0c4d7b72SSadaf Ebrahimi      </action>
253*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" issue="IO-801" due-to="James Howe, Gary Gregory">
254*0c4d7b72SSadaf Ebrahimi        Deprecation documentation gives incorrect alternative.
255*0c4d7b72SSadaf Ebrahimi      </action>
256*0c4d7b72SSadaf Ebrahimi      <!-- ADD -->
257*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
258*0c4d7b72SSadaf Ebrahimi        Add CharSequenceInputStream.Builder.
259*0c4d7b72SSadaf Ebrahimi      </action>
260*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
261*0c4d7b72SSadaf Ebrahimi        Add ChunkedOutputStream.Builder.
262*0c4d7b72SSadaf Ebrahimi      </action>
263*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
264*0c4d7b72SSadaf Ebrahimi        Add AbstractStreamBuilder.setOpenOptions(OpenOption...).
265*0c4d7b72SSadaf Ebrahimi      </action>
266*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
267*0c4d7b72SSadaf Ebrahimi        Add some missing conversions to AbstractOrigin subclasses.
268*0c4d7b72SSadaf Ebrahimi      </action>
269*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
270*0c4d7b72SSadaf Ebrahimi        Add AbstractOrigin.getByteArray(long, int).
271*0c4d7b72SSadaf Ebrahimi      </action>
272*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
273*0c4d7b72SSadaf Ebrahimi        Add and use RandomAccessFiles.
274*0c4d7b72SSadaf Ebrahimi      </action>
275*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
276*0c4d7b72SSadaf Ebrahimi        Add AbstractOrigin.size().
277*0c4d7b72SSadaf Ebrahimi      </action>
278*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
279*0c4d7b72SSadaf Ebrahimi        Add PathUtils.EMPTY_FILE_ATTRIBUTE_ARRAY.
280*0c4d7b72SSadaf Ebrahimi      </action>
281*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
282*0c4d7b72SSadaf Ebrahimi        Add CharSequenceInputStream.Builder.setCharsetEncoder(CharsetEncoder).
283*0c4d7b72SSadaf Ebrahimi      </action>
284*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
285*0c4d7b72SSadaf Ebrahimi        Add CharsetEncoders.toCharsetEncoder(CharsetEncoder, Supplier&lt;CharsetEncoder&gt;).
286*0c4d7b72SSadaf Ebrahimi      </action>
287*0c4d7b72SSadaf Ebrahimi      <!-- UPDATE -->
288*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
289*0c4d7b72SSadaf Ebrahimi        Bump commons-parent from 57 to 58.
290*0c4d7b72SSadaf Ebrahimi      </action>
291*0c4d7b72SSadaf Ebrahimi    </release>
292*0c4d7b72SSadaf Ebrahimi    <release version="2.12.0" date="2023-05-13" description="Java 8 is required.">
293*0c4d7b72SSadaf Ebrahimi      <!-- FIX -->
294*0c4d7b72SSadaf Ebrahimi      <action issue="IO-697" dev="kinow" type="fix" due-to="otter606">
295*0c4d7b72SSadaf Ebrahimi        IOUtils.toByteArray size validation does not match documentation.
296*0c4d7b72SSadaf Ebrahimi      </action>
297*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
298*0c4d7b72SSadaf Ebrahimi        Fix Javadoc links to the JRE Javadoc 8.
299*0c4d7b72SSadaf Ebrahimi      </action>
300*0c4d7b72SSadaf Ebrahimi      <action issue="IO-744" dev="ggregory" type="fix" due-to="RBRi, Gary Gregory">
301*0c4d7b72SSadaf Ebrahimi        FileWriterWithEncoding for an existing file no longer truncates the file. #251.
302*0c4d7b72SSadaf Ebrahimi      </action>
303*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
304*0c4d7b72SSadaf Ebrahimi        A null Charset or Charset name in FileWriterWithEncoding constructors uses the default Charset.
305*0c4d7b72SSadaf Ebrahimi      </action>
306*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Davide Angelocola">
307*0c4d7b72SSadaf Ebrahimi        Fix usage of assertNotNull #269.
308*0c4d7b72SSadaf Ebrahimi      </action>
309*0c4d7b72SSadaf Ebrahimi      <action issue="IO-727" dev="ggregory" type="fix" due-to="trungPa, Gary Gregory">
310*0c4d7b72SSadaf Ebrahimi        FilenameUtils directoryContains() should handle files with the same prefix #217.
311*0c4d7b72SSadaf Ebrahimi      </action>
312*0c4d7b72SSadaf Ebrahimi      <action issue="IO-746" dev="ggregory" type="add" due-to="Davide Angelocola">
313*0c4d7b72SSadaf Ebrahimi        Drop unnecessary casts and conversions #267.
314*0c4d7b72SSadaf Ebrahimi      </action>
315*0c4d7b72SSadaf Ebrahimi      <action issue="IO-748" dev="ggregory" type="fix" due-to="Dirk Heinrichs, Gary Gregory, Elango Ravi">
316*0c4d7b72SSadaf Ebrahimi        FileUtils.moveToDirectory() exception documentation and exception message error.
317*0c4d7b72SSadaf Ebrahimi      </action>
318*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
319*0c4d7b72SSadaf Ebrahimi        ThreadMonitor.sleep(Duration) ignores nanoseconds.
320*0c4d7b72SSadaf Ebrahimi      </action>
321*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
322*0c4d7b72SSadaf Ebrahimi        Fix Javadoc in ThreadMonitor#run() method. #273.
323*0c4d7b72SSadaf Ebrahimi      </action>
324*0c4d7b72SSadaf Ebrahimi      <action issue="IO-749" dev="ggregory" type="fix" due-to="haihuiyang, Gary Gregory">
325*0c4d7b72SSadaf Ebrahimi        FileUtils.listFiles() does not list matching files if File parameter is a symbolic link.
326*0c4d7b72SSadaf Ebrahimi      </action>
327*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="niranjanghule, Gary Gregory">
328*0c4d7b72SSadaf Ebrahimi        Fix typo in Javadocs for FileUtils#convertFileCollectionToFileArray() #276.
329*0c4d7b72SSadaf Ebrahimi      </action>
330*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="DaGeRe, Gary Gregory">
331*0c4d7b72SSadaf Ebrahimi        Avoid Code Duplication: Reuse Sleep from ThreadMonitor #66.
332*0c4d7b72SSadaf Ebrahimi      </action>
333*0c4d7b72SSadaf Ebrahimi      <action issue="IO-750" dev="ggregory" type="fix" due-to="Sita Geßner, Sebastian Peters, Gary Gregory">
334*0c4d7b72SSadaf Ebrahimi        FileUtils.iterateFiles also lists directories.
335*0c4d7b72SSadaf Ebrahimi      </action>
336*0c4d7b72SSadaf Ebrahimi      <action issue="IO-721" dev="ggregory" type="fix" due-to="Dirk Heinrichs, Gary Gregory">
337*0c4d7b72SSadaf Ebrahimi        Wrong exception message in FileUtils.setLastModified(File, File).
338*0c4d7b72SSadaf Ebrahimi      </action>
339*0c4d7b72SSadaf Ebrahimi      <action issue="IO-717" dev="ggregory" type="fix" due-to="Marcono1234, Gary Gregory">
340*0c4d7b72SSadaf Ebrahimi        Infinite loop in ReaderInputStream instead of throwing exception for CodingErrorAction.REPORT.
341*0c4d7b72SSadaf Ebrahimi      </action>
342*0c4d7b72SSadaf Ebrahimi      <action issue="IO-716" dev="ggregory" type="fix" due-to="Marcono1234, Gary Gregory">
343*0c4d7b72SSadaf Ebrahimi        ReaderInputStream enter infinite loop for too small buffer sizes.
344*0c4d7b72SSadaf Ebrahimi      </action>
345*0c4d7b72SSadaf Ebrahimi      <action issue="IO-638" dev="ggregory" type="fix" due-to="Thayne McCombs, Gary Gregory">
346*0c4d7b72SSadaf Ebrahimi        Infinite loop in CharSequenceInputStream.read for 4-byte characters with UTF-8 and 3-byte buffer.
347*0c4d7b72SSadaf Ebrahimi      </action>
348*0c4d7b72SSadaf Ebrahimi      <action issue="IO-638" dev="ggregory" type="fix" due-to="Gary Gregory">
349*0c4d7b72SSadaf Ebrahimi        PathUtils.setReadOnly(Path, boolean, LinkOption...) should add READ_* file attributes when using POSIX.
350*0c4d7b72SSadaf Ebrahimi      </action>
351*0c4d7b72SSadaf Ebrahimi      <action issue="IO-638" dev="ggregory" type="fix" due-to="Gary Gregory">
352*0c4d7b72SSadaf Ebrahimi        PathUtils.setReadOnly(Path, boolean, LinkOption...) readOnly argument is always assumed true on POSIX.
353*0c4d7b72SSadaf Ebrahimi      </action>
354*0c4d7b72SSadaf Ebrahimi      <action issue="IO-729" dev="ggregory" type="fix" due-to="Rob Spoor, Gary Gregory">
355*0c4d7b72SSadaf Ebrahimi        Prevent IllegalArgumentExceptions in BrokenInputStream/Reader/OutputStream/Writer #278.
356*0c4d7b72SSadaf Ebrahimi      </action>
357*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
358*0c4d7b72SSadaf Ebrahimi        FileUtils.copyURLToFile(URL, File, int, int) leaks its URLConnection.
359*0c4d7b72SSadaf Ebrahimi        Called by FileUtils.copyURLToFile(URL, File).
360*0c4d7b72SSadaf Ebrahimi      </action>
361*0c4d7b72SSadaf Ebrahimi      <action issue="IO-714" dev="ggregory" type="fix" due-to="kevinwang1975, Gary Gregory">
362*0c4d7b72SSadaf Ebrahimi        Fixed ReaderInputStream not calling CharsetEncoder.flush issue #283.
363*0c4d7b72SSadaf Ebrahimi      </action>
364*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
365*0c4d7b72SSadaf Ebrahimi        Minor changes #287.
366*0c4d7b72SSadaf Ebrahimi      </action>
367*0c4d7b72SSadaf Ebrahimi      <action issue="IO-756" dev="ggregory" type="fix" due-to="wodencafe, Gary Gregory, Bruno P. Kinoshita">
368*0c4d7b72SSadaf Ebrahimi        Update FileWriterWithEncoding to extend ProxyWriter #296.
369*0c4d7b72SSadaf Ebrahimi      </action>
370*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
371*0c4d7b72SSadaf Ebrahimi        Initialize the message of an IOExceptionList to a default if null.
372*0c4d7b72SSadaf Ebrahimi      </action>
373*0c4d7b72SSadaf Ebrahimi      <action issue="IO-751" dev="ggregory" type="fix" due-to="Gary Gregory, Richard Cyganiak">
374*0c4d7b72SSadaf Ebrahimi        When deleting symlinks, File/PathUtils.deleteDirectory() changes file permissions of the target.
375*0c4d7b72SSadaf Ebrahimi      </action>
376*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
377*0c4d7b72SSadaf Ebrahimi        ReaderInputStream maps null Charset, Charset name, and CharsetEncoder to the platform default instead of throwing a NullPointerException.
378*0c4d7b72SSadaf Ebrahimi      </action>
379*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
380*0c4d7b72SSadaf Ebrahimi        CharSequenceInputStream maps null Charset and Charset name to the platform default instead of throwing a NullPointerException.
381*0c4d7b72SSadaf Ebrahimi      </action>
382*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
383*0c4d7b72SSadaf Ebrahimi        WriterOutputStream maps null Charset, Charset name, and CharsetEncoder name to the platform default instead of throwing a NullPointerException.
384*0c4d7b72SSadaf Ebrahimi      </action>
385*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Chad Wilson, Gary Gregory">
386*0c4d7b72SSadaf Ebrahimi        FileUtils.copyURLToFile should create target parent directories and overwrite target file #319.
387*0c4d7b72SSadaf Ebrahimi      </action>
388*0c4d7b72SSadaf Ebrahimi      <action issue="IO-484" dev="ggregory" type="fix" due-to="Marcono1234, Gary Gregory">
389*0c4d7b72SSadaf Ebrahimi        Fix incorrect FilenameUtils Javadoc for null bytes #310.
390*0c4d7b72SSadaf Ebrahimi      </action>
391*0c4d7b72SSadaf Ebrahimi      <action issue="IO-484" dev="ggregory" type="fix" due-to="Arturo Bernal">
392*0c4d7b72SSadaf Ebrahimi        Change to uppercase variable constant. #323.
393*0c4d7b72SSadaf Ebrahimi      </action>
394*0c4d7b72SSadaf Ebrahimi      <action issue="IO-484" dev="ggregory" type="fix" due-to="David Huang, Gary Gregory">
395*0c4d7b72SSadaf Ebrahimi        IOCase.isCaseSensitive(IOCase) result is backward #325.
396*0c4d7b72SSadaf Ebrahimi      </action>
397*0c4d7b72SSadaf Ebrahimi      <action issue="IO-758" dev="ggregory" type="fix" due-to="Marcono1234, Gary Gregory">
398*0c4d7b72SSadaf Ebrahimi        Deprecate PathUtils.NOFOLLOW_LINK_OPTION_ARRAY in favor of noFollowLinkOptionArray().
399*0c4d7b72SSadaf Ebrahimi      </action>
400*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Marcono1234, Gary Gregory">
401*0c4d7b72SSadaf Ebrahimi        Improve ReaderInputStream documentation #291.
402*0c4d7b72SSadaf Ebrahimi      </action>
403*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="richarda23">
404*0c4d7b72SSadaf Ebrahimi        Fix misleading comments in FileFilterTest #334.
405*0c4d7b72SSadaf Ebrahimi      </action>
406*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Diego Marcilio">
407*0c4d7b72SSadaf Ebrahimi        Add missing Javadoc for exceptions thrown for invalid arguments #339.
408*0c4d7b72SSadaf Ebrahimi      </action>
409*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="richarda23">
410*0c4d7b72SSadaf Ebrahimi        FileFilterTest minor fixes #340.
411*0c4d7b72SSadaf Ebrahimi      </action>
412*0c4d7b72SSadaf Ebrahimi      <action issue="IO-764" dev="ggregory" type="fix" due-to="DaGeRe, Gary Gregory">
413*0c4d7b72SSadaf Ebrahimi        IOUtils.write() throws OutOfMemoryError/NegativeArraySizeException while writing big strings #343.
414*0c4d7b72SSadaf Ebrahimi      </action>
415*0c4d7b72SSadaf Ebrahimi      <action issue="IO-768" dev="ggregory" type="fix" due-to="Marcono1234, Michael Osipov">
416*0c4d7b72SSadaf Ebrahimi        Add reserved Windows file names CONIN$ and CONOUT$ to FileSystem #355.
417*0c4d7b72SSadaf Ebrahimi      </action>
418*0c4d7b72SSadaf Ebrahimi      <action issue="IO-773" dev="ggregory" type="fix" due-to="Dominik Reinarz, Gary Gregory">
419*0c4d7b72SSadaf Ebrahimi        RegexFileFilter is no longer Serializable.
420*0c4d7b72SSadaf Ebrahimi      </action>
421*0c4d7b72SSadaf Ebrahimi      <action issue="IO-763" dev="ggregory" type="fix" due-to="Richard Adams, Gary Gregory">
422*0c4d7b72SSadaf Ebrahimi        [Javadoc] FileFilterUtils doc does not match impl: missing some file filters.
423*0c4d7b72SSadaf Ebrahimi      </action>
424*0c4d7b72SSadaf Ebrahimi      <action issue="IO-762" dev="ggregory" type="fix" due-to="Leonidas Chiron, Gary Gregory">
425*0c4d7b72SSadaf Ebrahimi        FileSystem.WINDOWS.isReservedFileName doesn't check for file extension.
426*0c4d7b72SSadaf Ebrahimi      </action>
427*0c4d7b72SSadaf Ebrahimi      <action issue="IO-772" dev="ggregory" type="fix" due-to="Dan Ziemba, Gary Gregory">
428*0c4d7b72SSadaf Ebrahimi        Confusing Javadoc on IOUtils#resourceToURL() and other resource* methods.
429*0c4d7b72SSadaf Ebrahimi      </action>
430*0c4d7b72SSadaf Ebrahimi      <action issue="IO-443" dev="ggregory" type="fix" due-to="Dan Ziemba, Gary Gregory">
431*0c4d7b72SSadaf Ebrahimi        FileUtils.copyFile methods throw an unnecessary "Failed to copy full contents from" exception.
432*0c4d7b72SSadaf Ebrahimi      </action>
433*0c4d7b72SSadaf Ebrahimi      <action issue="IO-564" dev="ggregory" type="fix" due-to="Hao Zhong, Bernd Eckenfels, Pascal Schumacher, Gary Gregory">
434*0c4d7b72SSadaf Ebrahimi        Pick up Javadoc from super for override write() methods in AbstractByteArrayOutputStream and ByteArrayOutputStream.
435*0c4d7b72SSadaf Ebrahimi      </action>
436*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Marc Wrobel">
437*0c4d7b72SSadaf Ebrahimi        Fix minor typos #367.
438*0c4d7b72SSadaf Ebrahimi      </action>
439*0c4d7b72SSadaf Ebrahimi      <action issue="IO-776" dev="kinow" type="fix" due-to="Chris Povirk">
440*0c4d7b72SSadaf Ebrahimi        Fix parameters to requireNonNull call in DeferredOutputSteam #368.
441*0c4d7b72SSadaf Ebrahimi      </action>
442*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
443*0c4d7b72SSadaf Ebrahimi        Fix PathUtils.copyFileToDirectory(URL,Path,CopyOption[]).
444*0c4d7b72SSadaf Ebrahimi      </action>
445*0c4d7b72SSadaf Ebrahimi      <action issue="IO-386" dev="ggregory" type="fix" due-to="Sebb, Bernd Eckenfels, zhipengxu, Gary Gregory">
446*0c4d7b72SSadaf Ebrahimi        FileUtils.doCopyFile uses different methods to check the file sizes.
447*0c4d7b72SSadaf Ebrahimi      </action>
448*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Michael Ernst">
449*0c4d7b72SSadaf Ebrahimi        Fix typos #375.
450*0c4d7b72SSadaf Ebrahimi      </action>
451*0c4d7b72SSadaf Ebrahimi      <action issue="IO-611" dev="ggregory" type="fix" due-to="Fedor Urvanov">
452*0c4d7b72SSadaf Ebrahimi        FilenameUtils.normalize javadoc and tests #383.
453*0c4d7b72SSadaf Ebrahimi      </action>
454*0c4d7b72SSadaf Ebrahimi      <action issue="IO-611" dev="ggregory" type="fix" due-to="ArdenL-Liu, Bruno P. Kinoshita, Gary Gregory">
455*0c4d7b72SSadaf Ebrahimi        Better docs in IOUtils and IOUtils.byteArray(int size) #374.
456*0c4d7b72SSadaf Ebrahimi      </action>
457*0c4d7b72SSadaf Ebrahimi      <action issue="IO-782" dev="ggregory" type="fix" due-to="Matteo Di Giovinazzo, Gary Gregory">
458*0c4d7b72SSadaf Ebrahimi        SequenceReader should close readers when its close method is called #391.
459*0c4d7b72SSadaf Ebrahimi      </action>
460*0c4d7b72SSadaf Ebrahimi      <action issue="IO-790" dev="ggregory" type="fix" due-to="Miguel Muñoz, Gary Gregory">
461*0c4d7b72SSadaf Ebrahimi        Fix symbolic link file filter #450.
462*0c4d7b72SSadaf Ebrahimi      </action>
463*0c4d7b72SSadaf Ebrahimi      <action issue="IO-790" dev="ggregory" type="fix" due-to="maxxedev, Gary Gregory, Bruno P. Kinoshita">
464*0c4d7b72SSadaf Ebrahimi        Apply nanoseconds precision for QueueInputStream timeout duration. #453.
465*0c4d7b72SSadaf Ebrahimi      </action>
466*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Marcono1234">
467*0c4d7b72SSadaf Ebrahimi        Fix overflow for FileUtilsTest constants #456.
468*0c4d7b72SSadaf Ebrahimi      </action>
469*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
470*0c4d7b72SSadaf Ebrahimi        Serialization is deprecated and will be removed in 3.0.
471*0c4d7b72SSadaf Ebrahimi      </action>
472*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
473*0c4d7b72SSadaf Ebrahimi        FileSystemUtils.performCommand(String[], int, Duration): Use Locale.getDefault() instead of ENGLISH.
474*0c4d7b72SSadaf Ebrahimi      </action>
475*0c4d7b72SSadaf Ebrahimi      <!-- ADD -->
476*0c4d7b72SSadaf Ebrahimi      <action type="add" dev="ggregory" due-to="Gary Gregory">
477*0c4d7b72SSadaf Ebrahimi        Add GitHub coverage.yml.
478*0c4d7b72SSadaf Ebrahimi      </action>
479*0c4d7b72SSadaf Ebrahimi      <action issue="IO-726" dev="ggregory" type="fix" due-to="shollander, Gary Gregory">
480*0c4d7b72SSadaf Ebrahimi        Add MemoryMappedFileInputStream #215.
481*0c4d7b72SSadaf Ebrahimi      </action>
482*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
483*0c4d7b72SSadaf Ebrahimi        Add BrokenReader.INSTANCE.
484*0c4d7b72SSadaf Ebrahimi      </action>
485*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
486*0c4d7b72SSadaf Ebrahimi        Add UncheckedBufferedReader.
487*0c4d7b72SSadaf Ebrahimi      </action>
488*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
489*0c4d7b72SSadaf Ebrahimi        Add UncheckedFilterReader.
490*0c4d7b72SSadaf Ebrahimi      </action>
491*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
492*0c4d7b72SSadaf Ebrahimi        Add UncheckedFilterWriter.
493*0c4d7b72SSadaf Ebrahimi      </action>
494*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
495*0c4d7b72SSadaf Ebrahimi        Add UncheckedFilterInputStream.
496*0c4d7b72SSadaf Ebrahimi      </action>
497*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
498*0c4d7b72SSadaf Ebrahimi        Add UncheckedFilterOutputStream.
499*0c4d7b72SSadaf Ebrahimi      </action>
500*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
501*0c4d7b72SSadaf Ebrahimi        Add BrokenInputStream.INSTANCE.
502*0c4d7b72SSadaf Ebrahimi      </action>
503*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
504*0c4d7b72SSadaf Ebrahimi        Add ClosedInputStream.INSTANCE and deprecate CLOSED_INPUT_STREAM.
505*0c4d7b72SSadaf Ebrahimi      </action>
506*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
507*0c4d7b72SSadaf Ebrahimi        Add ClosedReader.INSTANCE and deprecate CLOSED_READER.
508*0c4d7b72SSadaf Ebrahimi      </action>
509*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
510*0c4d7b72SSadaf Ebrahimi        Add BrokenWriter.INSTANCE.
511*0c4d7b72SSadaf Ebrahimi      </action>
512*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
513*0c4d7b72SSadaf Ebrahimi        Add ClosedOutputStream.INSTANCE and deprecate CLOSED_OUTPUT_STREAM.
514*0c4d7b72SSadaf Ebrahimi      </action>
515*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
516*0c4d7b72SSadaf Ebrahimi        Add ClosedWriter.INSTANCE and deprecate CLOSED_WRITER.
517*0c4d7b72SSadaf Ebrahimi      </action>
518*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
519*0c4d7b72SSadaf Ebrahimi        Add NullOutputStream.INSTANCE and deprecate NULL_OUTPUT_STREAM.
520*0c4d7b72SSadaf Ebrahimi      </action>
521*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
522*0c4d7b72SSadaf Ebrahimi        Add NullPrintStream.INSTANCE and deprecate NULL_PRINT_STREAM.
523*0c4d7b72SSadaf Ebrahimi      </action>
524*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
525*0c4d7b72SSadaf Ebrahimi        Add NullWriter.INSTANCE and deprecate NULL_WRITER.
526*0c4d7b72SSadaf Ebrahimi      </action>
527*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
528*0c4d7b72SSadaf Ebrahimi        Add NullInputStream.INSTANCE.
529*0c4d7b72SSadaf Ebrahimi      </action>
530*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
531*0c4d7b72SSadaf Ebrahimi        Add NullReader.INSTANCE.
532*0c4d7b72SSadaf Ebrahimi      </action>
533*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
534*0c4d7b72SSadaf Ebrahimi        Add PathUtils.readString(Path, Charset).
535*0c4d7b72SSadaf Ebrahimi      </action>
536*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
537*0c4d7b72SSadaf Ebrahimi        Add FileUtils.newOutputStream(File, boolean).
538*0c4d7b72SSadaf Ebrahimi      </action>
539*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
540*0c4d7b72SSadaf Ebrahimi        Add PathUtils.newOutputStream(Path, boolean).
541*0c4d7b72SSadaf Ebrahimi      </action>
542*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
543*0c4d7b72SSadaf Ebrahimi        Add UncheckedAppendable.
544*0c4d7b72SSadaf Ebrahimi      </action>
545*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
546*0c4d7b72SSadaf Ebrahimi        Add and reuse UncheckedIOExceptions.
547*0c4d7b72SSadaf Ebrahimi      </action>
548*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
549*0c4d7b72SSadaf Ebrahimi        Add PathUtils.getTempDirectory().
550*0c4d7b72SSadaf Ebrahimi      </action>
551*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
552*0c4d7b72SSadaf Ebrahimi        Add FileSystem.getNameSeparator().
553*0c4d7b72SSadaf Ebrahimi      </action>
554*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
555*0c4d7b72SSadaf Ebrahimi        Add FileSystem.normalizeSeparators().
556*0c4d7b72SSadaf Ebrahimi      </action>
557*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
558*0c4d7b72SSadaf Ebrahimi        Add PathUtils.isNewer(Path, FileTime, LinkOption...).
559*0c4d7b72SSadaf Ebrahimi      </action>
560*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
561*0c4d7b72SSadaf Ebrahimi        Add PathUtils.isNewer(Path, Instant, LinkOption...).
562*0c4d7b72SSadaf Ebrahimi      </action>
563*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
564*0c4d7b72SSadaf Ebrahimi        Add AgeFileFilter.AgeFileFilter(Instant).
565*0c4d7b72SSadaf Ebrahimi        Add AgeFileFilter.AgeFileFilter(Instant, boolean).
566*0c4d7b72SSadaf Ebrahimi      </action>
567*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
568*0c4d7b72SSadaf Ebrahimi        Add FileUtils.lastModifiedFileTime(File).
569*0c4d7b72SSadaf Ebrahimi      </action>
570*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
571*0c4d7b72SSadaf Ebrahimi        Add FileTimes.
572*0c4d7b72SSadaf Ebrahimi      </action>
573*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
574*0c4d7b72SSadaf Ebrahimi        Add PathUtils.waitFor(Path, Duration, LinkOption...).
575*0c4d7b72SSadaf Ebrahimi      </action>
576*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
577*0c4d7b72SSadaf Ebrahimi        Add org.apache.commons.io.input.Tailer.getDelayDuration().
578*0c4d7b72SSadaf Ebrahimi      </action>
579*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
580*0c4d7b72SSadaf Ebrahimi        Add FileUtils.current().
581*0c4d7b72SSadaf Ebrahimi      </action>
582*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
583*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.setLastModifiedTime(Path) for more precision.
584*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.setLastModifiedTime(Path, Path) for more precision.
585*0c4d7b72SSadaf Ebrahimi      </action>
586*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
587*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.isNewer(Path, ChronoZonedDateTime, LinkOption...) for more precision.
588*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.isNewer(Path, Path) for more precision.
589*0c4d7b72SSadaf Ebrahimi        Add and use FileUtils.isNewer(File, FileTime) for more precision.
590*0c4d7b72SSadaf Ebrahimi      </action>
591*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
592*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.isOlder(Path, FileTime, LinkOption...).
593*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.isOlder(Path, Instant, LinkOption...).
594*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.isOlder(Path, long, LinkOption...).
595*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.isOlder(Path, Path).
596*0c4d7b72SSadaf Ebrahimi      </action>
597*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
598*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.sizeOf(Path).
599*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.sizeOfAsBigInteger(Path).
600*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.sizeOfDirectory(Path).
601*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.sizeOfDirectoryAsBigInteger(Path).
602*0c4d7b72SSadaf Ebrahimi      </action>
603*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
604*0c4d7b72SSadaf Ebrahimi        Add and use IOCase.value(IOCase, IOCase).
605*0c4d7b72SSadaf Ebrahimi      </action>
606*0c4d7b72SSadaf Ebrahimi      <action dev="jonfreedman" type="add" due-to="Jon Freedman, Gary Gregory">
607*0c4d7b72SSadaf Ebrahimi        Add Tailer.Tailable interface to allow tailing of remote files for example using jCIFS.
608*0c4d7b72SSadaf Ebrahimi      </action>
609*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
610*0c4d7b72SSadaf Ebrahimi        Add and use RandomAccessFileMode.
611*0c4d7b72SSadaf Ebrahimi      </action>
612*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
613*0c4d7b72SSadaf Ebrahimi        Add PathUtils.writeString(Path, CharSequence, Charset, OpenOption...).
614*0c4d7b72SSadaf Ebrahimi      </action>
615*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
616*0c4d7b72SSadaf Ebrahimi        Add PathUtiFiles.getFileAttributeView() shorthands:
617*0c4d7b72SSadaf Ebrahimi          - PathUtils.getAclFileAttributeView(Path, LinkOption...)
618*0c4d7b72SSadaf Ebrahimi          - PathUtils.getDosFileAttributeView(Path, LinkOption...)
619*0c4d7b72SSadaf Ebrahimi          - PathUtils.getPosixFileAttributeView(Path, LinkOption...)
620*0c4d7b72SSadaf Ebrahimi      </action>
621*0c4d7b72SSadaf Ebrahimi      <action issue="IO-747" dev="mgrigorov" type="add">
622*0c4d7b72SSadaf Ebrahimi        Make commons-io a JPMS module by adding module-info.class.
623*0c4d7b72SSadaf Ebrahimi      </action>
624*0c4d7b72SSadaf Ebrahimi      <action issue="IO-753" dev="ggregory" type="add" due-to="SebastianDietrich, Gary Gregory">
625*0c4d7b72SSadaf Ebrahimi        Add IOUtils method to copy output stream to input stream #281.
626*0c4d7b72SSadaf Ebrahimi      </action>
627*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
628*0c4d7b72SSadaf Ebrahimi        Add PathUtils.isPosix(Path, LinkOption...). #290
629*0c4d7b72SSadaf Ebrahimi      </action>
630*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
631*0c4d7b72SSadaf Ebrahimi        Add PathUtils.readAttributes(Path, Class, LinkOption...). #290
632*0c4d7b72SSadaf Ebrahimi      </action>
633*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
634*0c4d7b72SSadaf Ebrahimi        Add IOExceptionList.checkEmpty(List, Object).
635*0c4d7b72SSadaf Ebrahimi      </action>
636*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
637*0c4d7b72SSadaf Ebrahimi        Add IOBiConsumer, IOTriConsumer, IOComparator, IOUnaryOperator, IOBinaryOperator.
638*0c4d7b72SSadaf Ebrahimi      </action>
639*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
640*0c4d7b72SSadaf Ebrahimi        Add and reuse IOConsumer forAll(*), forEach(*), and forEachIndexed(*).
641*0c4d7b72SSadaf Ebrahimi      </action>
642*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
643*0c4d7b72SSadaf Ebrahimi        Add CharsetEncoders.
644*0c4d7b72SSadaf Ebrahimi      </action>
645*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
646*0c4d7b72SSadaf Ebrahimi        Add CharsetDecoders.
647*0c4d7b72SSadaf Ebrahimi      </action>
648*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
649*0c4d7b72SSadaf Ebrahimi        Add PathUtils.createParentDirectories(Path, LinkOption, FileAttribute...).
650*0c4d7b72SSadaf Ebrahimi      </action>
651*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
652*0c4d7b72SSadaf Ebrahimi        Update FileEntry to use FileTime instead of long for file time stamps.
653*0c4d7b72SSadaf Ebrahimi      </action>
654*0c4d7b72SSadaf Ebrahimi      <action issue="IO-680" dev="ggregory" type="add" due-to="XenoAmess, sebbASF, Gary Gregory">
655*0c4d7b72SSadaf Ebrahimi        Add more tests for IOUtils.contentEqualsIgnoreEOL #137.
656*0c4d7b72SSadaf Ebrahimi      </action>
657*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
658*0c4d7b72SSadaf Ebrahimi        Reduce boilerplate through new UncheckedIO class and friends in org.apache.commons.io.function.
659*0c4d7b72SSadaf Ebrahimi      </action>
660*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
661*0c4d7b72SSadaf Ebrahimi        Add PathUtils.touch(Path).
662*0c4d7b72SSadaf Ebrahimi      </action>
663*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
664*0c4d7b72SSadaf Ebrahimi        Add FileSystem.getIllegalFileNameCodePoints().
665*0c4d7b72SSadaf Ebrahimi      </action>
666*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Isira Seneviratne, Gary Gregory">
667*0c4d7b72SSadaf Ebrahimi        Add FileUtils.isFileNewer(File, ChronoLocalDate, OffsetTime).
668*0c4d7b72SSadaf Ebrahimi        Add FileUtils.isFileNewer(File, OffsetDateTime).
669*0c4d7b72SSadaf Ebrahimi        Add FileUtils.isFileOlder(File, ChronoLocalDate, OffsetTime).
670*0c4d7b72SSadaf Ebrahimi        Add FileUtils.isFileOlder(File, OffsetDateTime).
671*0c4d7b72SSadaf Ebrahimi      </action>
672*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
673*0c4d7b72SSadaf Ebrahimi        Add IOBiConsumer.noop().
674*0c4d7b72SSadaf Ebrahimi      </action>
675*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
676*0c4d7b72SSadaf Ebrahimi        Add IOUtils.closeQuietly(Iterable&lt;Closeable&gt;).
677*0c4d7b72SSadaf Ebrahimi        Add IOUtils.closeQuietly(Stream&lt;Closeable&gt;).
678*0c4d7b72SSadaf Ebrahimi      </action>
679*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
680*0c4d7b72SSadaf Ebrahimi        Add Charsets.toCharset(Charset, Charset).
681*0c4d7b72SSadaf Ebrahimi        Add Charsets.toCharset(String, Charset).
682*0c4d7b72SSadaf Ebrahimi      </action>
683*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
684*0c4d7b72SSadaf Ebrahimi        Add XmlStreamWriter(OutputStream, Charset).
685*0c4d7b72SSadaf Ebrahimi      </action>
686*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
687*0c4d7b72SSadaf Ebrahimi        Add PathUtils.getLastModifiedFileTime(*).
688*0c4d7b72SSadaf Ebrahimi      </action>
689*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
690*0c4d7b72SSadaf Ebrahimi        Add IOBiFunction, IOTriFunction, IOQuadFunction, IOPredicate, IOIterator, IOSpliterator, IOBaseStream, IOStream, FilesUncheck.
691*0c4d7b72SSadaf Ebrahimi      </action>
692*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
693*0c4d7b72SSadaf Ebrahimi        Add IOUtils.consume(Reader).
694*0c4d7b72SSadaf Ebrahimi      </action>
695*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
696*0c4d7b72SSadaf Ebrahimi        Add IOSupplier.asSupplier().
697*0c4d7b72SSadaf Ebrahimi      </action>
698*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
699*0c4d7b72SSadaf Ebrahimi        Add IOFunction.asFunction().
700*0c4d7b72SSadaf Ebrahimi      </action>
701*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
702*0c4d7b72SSadaf Ebrahimi        Add IOConsumer.asConsumer().
703*0c4d7b72SSadaf Ebrahimi      </action>
704*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
705*0c4d7b72SSadaf Ebrahimi        Add TimestampedObserver.isClosed().
706*0c4d7b72SSadaf Ebrahimi      </action>
707*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
708*0c4d7b72SSadaf Ebrahimi        IOExceptionList implements Iterable.
709*0c4d7b72SSadaf Ebrahimi      </action>
710*0c4d7b72SSadaf Ebrahimi      <action issue="IO-784" dev="ggregory" type="add" due-to="Fredrik Kjellberg, Gary Gregory">
711*0c4d7b72SSadaf Ebrahimi        Add support for Appendable to HexDump #418.
712*0c4d7b72SSadaf Ebrahimi      </action>
713*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="DaGeRe, Gary Gregory">
714*0c4d7b72SSadaf Ebrahimi        Add and use ThreadUtils.
715*0c4d7b72SSadaf Ebrahimi      </action>
716*0c4d7b72SSadaf Ebrahimi      <action issue="IO-786" dev="ggregory" type="add" due-to="Gary Gregory">
717*0c4d7b72SSadaf Ebrahimi        Add UnsynchronizedFilterInputStream.
718*0c4d7b72SSadaf Ebrahimi      </action>
719*0c4d7b72SSadaf Ebrahimi      <action issue="IO-786" dev="ggregory" type="add" due-to="Gary Gregory, Benoit Tellier">
720*0c4d7b72SSadaf Ebrahimi        Add UnsynchronizedBufferedInputStream.
721*0c4d7b72SSadaf Ebrahimi      </action>
722*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
723*0c4d7b72SSadaf Ebrahimi        Add FileSystem.getBlockSize().
724*0c4d7b72SSadaf Ebrahimi      </action>
725*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
726*0c4d7b72SSadaf Ebrahimi        Add builders and avoid creating more constructors for all permutations of current options.
727*0c4d7b72SSadaf Ebrahimi      </action>
728*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory, maxxedev">
729*0c4d7b72SSadaf Ebrahimi        Refactor using new Supplier API IOUtils.toString(IOSupplier&lt;InputStream&gt;, Charset[, IOSupplier&lt;String&gt;]).
730*0c4d7b72SSadaf Ebrahimi      </action>
731*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory, maxxedev">
732*0c4d7b72SSadaf Ebrahimi        Refactor using new Supplier API org.apache.commons.io.file.PathUtils.copy(IOSupplier&lt;InputStream&gt;, Path, CopyOption...).
733*0c4d7b72SSadaf Ebrahimi      </action>
734*0c4d7b72SSadaf Ebrahimi      <!-- UPDATE -->
735*0c4d7b72SSadaf Ebrahimi      <action dev="kinow" type="update" due-to="Dependabot, Gary Gregory">
736*0c4d7b72SSadaf Ebrahimi        Bump actions/cache from 2.1.6 to 3.0.10 #307, #337, #393.
737*0c4d7b72SSadaf Ebrahimi      </action>
738*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
739*0c4d7b72SSadaf Ebrahimi        Bump actions/checkout from 2.3.4 to 3.1.0 #286, #298, #330, #392.
740*0c4d7b72SSadaf Ebrahimi      </action>
741*0c4d7b72SSadaf Ebrahimi      <action dev="kinow" type="update" due-to="Dependabot">
742*0c4d7b72SSadaf Ebrahimi        Bump actions/setup-java from 2 to 3.6.0 #346, #397.
743*0c4d7b72SSadaf Ebrahimi      </action>
744*0c4d7b72SSadaf Ebrahimi      <action dev="kinow" type="update" due-to="Dependabot">
745*0c4d7b72SSadaf Ebrahimi        Bump github/codeql-action from 1 to 2 #353.
746*0c4d7b72SSadaf Ebrahimi      </action>
747*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
748*0c4d7b72SSadaf Ebrahimi        Bump Maven Javadoc plugin from 3.2.0 to 3.4.1.
749*0c4d7b72SSadaf Ebrahimi      </action>
750*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
751*0c4d7b72SSadaf Ebrahimi        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.
752*0c4d7b72SSadaf Ebrahimi      </action>
753*0c4d7b72SSadaf Ebrahimi      <action dev="kinow" type="update" due-to="Gary Gregory, Dependabot">
754*0c4d7b72SSadaf Ebrahimi        Bump spotbugs from 4.5.2 to 4.7.3 #313, #317, #357, #382, #398.
755*0c4d7b72SSadaf Ebrahimi      </action>
756*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
757*0c4d7b72SSadaf Ebrahimi        Bump JUnit from 5.7.2 to 5.8.2.
758*0c4d7b72SSadaf Ebrahimi      </action>
759*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
760*0c4d7b72SSadaf Ebrahimi        Bump maven-enforcer-plugin from 3.0.0-M3 to 3.3.0 #255, #363, #431, #446.
761*0c4d7b72SSadaf Ebrahimi      </action>
762*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
763*0c4d7b72SSadaf Ebrahimi        Bump checkstyle from 8.44 to 9.3 #256, #257, #266, #279, #292. #308.
764*0c4d7b72SSadaf Ebrahimi      </action>
765*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
766*0c4d7b72SSadaf Ebrahimi        Bump junit-bom from 5.8.0-M1 to 5.9.1 #260, #271, #275, #309, #386.
767*0c4d7b72SSadaf Ebrahimi      </action>
768*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
769*0c4d7b72SSadaf Ebrahimi        Bump mockito-inline from 3.11.2 to 4.11.0 #262, #264, #282, #306, #314, #331, #348, #359, #381, #399, #405, #414, #420.
770*0c4d7b72SSadaf Ebrahimi      </action>
771*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
772*0c4d7b72SSadaf Ebrahimi        Bump jmh.version from 1.32 to 1.36 #258, #316, #342, #404.
773*0c4d7b72SSadaf Ebrahimi      </action>
774*0c4d7b72SSadaf Ebrahimi      <action dev="kinow" type="update" due-to="Dependabot">
775*0c4d7b72SSadaf Ebrahimi        Bump moditect-maven-plugin from 1.0.0.RC1 to 1.0.0.Final #280, #439, #445.
776*0c4d7b72SSadaf Ebrahimi      </action>
777*0c4d7b72SSadaf Ebrahimi      <action dev="kinow" type="update" due-to="Dependabot, Gary Gregory">
778*0c4d7b72SSadaf Ebrahimi        Bump junit-pioneer from 1.4.2 to 1.9.1 #304. #335, #362, #402, #406, #409.
779*0c4d7b72SSadaf Ebrahimi      </action>
780*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
781*0c4d7b72SSadaf Ebrahimi        Bump japicmp-maven-plugin from 0.15.3 to 0.16.0.
782*0c4d7b72SSadaf Ebrahimi      </action>
783*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
784*0c4d7b72SSadaf Ebrahimi        Bump commons-parent from 52 to 57 #388, #415, #421, #184.
785*0c4d7b72SSadaf Ebrahimi      </action>
786*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
787*0c4d7b72SSadaf Ebrahimi        Bump jacoco-maven-plugin from 0.8.7 to 0.8.8.
788*0c4d7b72SSadaf Ebrahimi      </action>
789*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
790*0c4d7b72SSadaf Ebrahimi        Bump maven-antrun-plugin from 3.0.0 to 3.1.0 #354.
791*0c4d7b72SSadaf Ebrahimi      </action>
792*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
793*0c4d7b72SSadaf Ebrahimi        Bump commons.surefire.version 3.0.0-M5 to 3.0.0-M7.
794*0c4d7b72SSadaf Ebrahimi      </action>
795*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
796*0c4d7b72SSadaf Ebrahimi        Bump PMD from 6.44.0 to 6.52.0.
797*0c4d7b72SSadaf Ebrahimi      </action>
798*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
799*0c4d7b72SSadaf Ebrahimi        Bump maven-pmd-plugin from 3.16.0 to 3.19.0.
800*0c4d7b72SSadaf Ebrahimi      </action>
801*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
802*0c4d7b72SSadaf Ebrahimi        Bump apache-rat from 0.13 to 0.14.
803*0c4d7b72SSadaf Ebrahimi      </action>
804*0c4d7b72SSadaf Ebrahimi      <action dev="kinow" type="update" due-to="Dependabot">
805*0c4d7b72SSadaf Ebrahimi        Bump exec-maven-plugin from 3.0.0 to 3.1.0 #369.
806*0c4d7b72SSadaf Ebrahimi      </action>
807*0c4d7b72SSadaf Ebrahimi      <action dev="kinow" type="update" due-to="Dependabot">
808*0c4d7b72SSadaf Ebrahimi        Bump maven-checkstyle-plugin from 3.1.2 to 3.2.0 #376.
809*0c4d7b72SSadaf Ebrahimi      </action>
810*0c4d7b72SSadaf Ebrahimi      <action dev="kinow" type="update" due-to="Dependabot">
811*0c4d7b72SSadaf Ebrahimi        Bump apache-rat-plugin from 0.14 to 0.15 #387.
812*0c4d7b72SSadaf Ebrahimi      </action>
813*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
814*0c4d7b72SSadaf Ebrahimi        Bump default buffer size for CharSequenceInputStream to IOUtils#DEFAULT_BUFFER_SIZE.
815*0c4d7b72SSadaf Ebrahimi      </action>
816*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
817*0c4d7b72SSadaf Ebrahimi        Bump default buffer size for ChunkedOutputStream to IOUtils#DEFAULT_BUFFER_SIZE.
818*0c4d7b72SSadaf Ebrahimi      </action>
819*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
820*0c4d7b72SSadaf Ebrahimi        Bump default buffer size for ChunkedWriter to IOUtils#DEFAULT_BUFFER_SIZE.
821*0c4d7b72SSadaf Ebrahimi      </action>
822*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
823*0c4d7b72SSadaf Ebrahimi        Bump default buffer size for ReaderInputStream to IOUtils#DEFAULT_BUFFER_SIZE.
824*0c4d7b72SSadaf Ebrahimi      </action>
825*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
826*0c4d7b72SSadaf Ebrahimi        Bump default buffer size for WriterOutputStream to IOUtils#DEFAULT_BUFFER_SIZE.
827*0c4d7b72SSadaf Ebrahimi      </action>
828*0c4d7b72SSadaf Ebrahimi    </release>
829*0c4d7b72SSadaf Ebrahimi    <release version="2.11.0" date="2021-07-09" description="Java 8 is required.">
830*0c4d7b72SSadaf Ebrahimi      <!-- FIX -->
831*0c4d7b72SSadaf Ebrahimi      <action issue="IO-741" dev="ggregory" type="fix" due-to="Zach Sherman">
832*0c4d7b72SSadaf Ebrahimi        FileUtils.listFiles does not list matching files if File parameter is a symbolic link.
833*0c4d7b72SSadaf Ebrahimi      </action>
834*0c4d7b72SSadaf Ebrahimi      <action issue="IO-724" dev="ggregory" type="fix" due-to="liran2000">
835*0c4d7b72SSadaf Ebrahimi        FileUtils#deleteDirectory(File) exception Javadoc inaccurate update #245.
836*0c4d7b72SSadaf Ebrahimi      </action>
837*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
838*0c4d7b72SSadaf Ebrahimi        Minor changes #243.
839*0c4d7b72SSadaf Ebrahimi      </action>
840*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Arturo Bernal">
841*0c4d7b72SSadaf Ebrahimi        Replace construction of FileInputStream and FileOutputStream objects with Files NIO APIs. #221.
842*0c4d7b72SSadaf Ebrahimi      </action>
843*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
844*0c4d7b72SSadaf Ebrahimi        Fix IndexOutOfBoundsException in IOExceptionList constructors.
845*0c4d7b72SSadaf Ebrahimi      </action>
846*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
847*0c4d7b72SSadaf Ebrahimi        Remove IOException from the method signatures that no longer throw IOException.
848*0c4d7b72SSadaf Ebrahimi        This maintains binary compatibility but not source compatibility.
849*0c4d7b72SSadaf Ebrahimi        - FilenameUtils
850*0c4d7b72SSadaf Ebrahimi            directoryContains(String, String)
851*0c4d7b72SSadaf Ebrahimi        - BoundedReader
852*0c4d7b72SSadaf Ebrahimi            BoundedReader(java.io.Reader, int)
853*0c4d7b72SSadaf Ebrahimi        - IOUtils
854*0c4d7b72SSadaf Ebrahimi            lineIterator(java.io.InputStream, Charset)
855*0c4d7b72SSadaf Ebrahimi            lineIterator(java.io.InputStream, String)
856*0c4d7b72SSadaf Ebrahimi            toByteArray(String)
857*0c4d7b72SSadaf Ebrahimi            toInputStream(CharSequence, String)
858*0c4d7b72SSadaf Ebrahimi            toInputStream(String, String)
859*0c4d7b72SSadaf Ebrahimi            toString(byte[])
860*0c4d7b72SSadaf Ebrahimi            toString(byte[], String)
861*0c4d7b72SSadaf Ebrahimi      </action>
862*0c4d7b72SSadaf Ebrahimi      <!-- ADD -->
863*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
864*0c4d7b72SSadaf Ebrahimi        Add SymbolicLinkFileFilter.
865*0c4d7b72SSadaf Ebrahimi      </action>
866*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="trncate">
867*0c4d7b72SSadaf Ebrahimi        Add test to make sure the setter of AndFileFilter works correctly #244.
868*0c4d7b72SSadaf Ebrahimi      </action>
869*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
870*0c4d7b72SSadaf Ebrahimi        Add XmlStreamReader(Path).
871*0c4d7b72SSadaf Ebrahimi      </action>
872*0c4d7b72SSadaf Ebrahimi      <!-- UPDATE -->
873*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
874*0c4d7b72SSadaf Ebrahimi        Bump mockito-inline from 3.11.0 to 3.11.2 #247.
875*0c4d7b72SSadaf Ebrahimi      </action>
876*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
877*0c4d7b72SSadaf Ebrahimi        Bump jmh.version from 1.27 to 1.32 #237.
878*0c4d7b72SSadaf Ebrahimi      </action>
879*0c4d7b72SSadaf Ebrahimi    </release>
880*0c4d7b72SSadaf Ebrahimi    <!-- The release date is the date RC is cut -->
881*0c4d7b72SSadaf Ebrahimi    <release version="2.10.0" date="2021-06-10" description="Java 8 is required.">
882*0c4d7b72SSadaf Ebrahimi      <!-- FIX -->
883*0c4d7b72SSadaf Ebrahimi      <action issue="IO-733" dev="ggregory" type="fix" due-to="Jim Sellers, Gary Gregory">
884*0c4d7b72SSadaf Ebrahimi        RegexFileFilter uses the path and file name instead of just the file name.
885*0c4d7b72SSadaf Ebrahimi      </action>
886*0c4d7b72SSadaf Ebrahimi      <action issue="IO-734" dev="ggregory" type="fix" due-to="Eric Norman">
887*0c4d7b72SSadaf Ebrahimi        The OSGi manifest now contains sun.* import packages #239.
888*0c4d7b72SSadaf Ebrahimi      </action>
889*0c4d7b72SSadaf Ebrahimi      <action issue="IO-585" dev="ggregory" type="fix" due-to="Adam McClenaghan">
890*0c4d7b72SSadaf Ebrahimi        Sanitize double slash after prefix #79.
891*0c4d7b72SSadaf Ebrahimi      </action>
892*0c4d7b72SSadaf Ebrahimi      <!-- ADD -->
893*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
894*0c4d7b72SSadaf Ebrahimi        Add and use RegexFileFilter.toString().
895*0c4d7b72SSadaf Ebrahimi      </action>
896*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
897*0c4d7b72SSadaf Ebrahimi        Add and use RegexFileFilter.RegexFileFilter(Pattern, Function&lt;Path&gt;, String>)
898*0c4d7b72SSadaf Ebrahimi      </action>
899*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
900*0c4d7b72SSadaf Ebrahimi        Add and use IOCase.isCaseSensitive(IOCase).
901*0c4d7b72SSadaf Ebrahimi      </action>
902*0c4d7b72SSadaf Ebrahimi      <!-- UPDATES -->
903*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
904*0c4d7b72SSadaf Ebrahimi        Bump actions/cache from 2.1.5 to 2.1.6 #238.
905*0c4d7b72SSadaf Ebrahimi      </action>
906*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
907*0c4d7b72SSadaf Ebrahimi        Bump junit-pioneer from 1.4.1 to 1.4.2 #240.
908*0c4d7b72SSadaf Ebrahimi      </action>
909*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
910*0c4d7b72SSadaf Ebrahimi        Bump checkstyle from 8.42 to 8.44 #241, #248.
911*0c4d7b72SSadaf Ebrahimi      </action>
912*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
913*0c4d7b72SSadaf Ebrahimi        Bump mockito-inline from 3.10.0 to 3.11.0 #242.
914*0c4d7b72SSadaf Ebrahimi      </action>
915*0c4d7b72SSadaf Ebrahimi    </release>
916*0c4d7b72SSadaf Ebrahimi    <release version="2.9.0" date="2021-05-22" description="Java 8 is required.">
917*0c4d7b72SSadaf Ebrahimi      <!-- FIX -->
918*0c4d7b72SSadaf Ebrahimi      <action issue="IO-686" dev="ggregory" type="fix" due-to="Alan Moffat, Gary Gregory">
919*0c4d7b72SSadaf Ebrahimi        IOUtils.toByteArray(InputStream) Javadoc does not match code.
920*0c4d7b72SSadaf Ebrahimi      </action>
921*0c4d7b72SSadaf Ebrahimi      <action issue="IO-689" dev="aherbert" type="fix" due-to="Uwe Schindler">
922*0c4d7b72SSadaf Ebrahimi        FileUtils: Remove Instant->ZonedDateTime->Instant round-trip.
923*0c4d7b72SSadaf Ebrahimi      </action>
924*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Michael Ernst, Gary Gregory">
925*0c4d7b72SSadaf Ebrahimi        Make FilenameUtils.equals() not throw an exception #154.
926*0c4d7b72SSadaf Ebrahimi      </action>
927*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Jan Peter Stotz, Bernd Eckenfels, Gary Gregory">
928*0c4d7b72SSadaf Ebrahimi        Un-deprecate IOUtils.closeQuietly() methods.
929*0c4d7b72SSadaf Ebrahimi      </action>
930*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Michiel Kalkman">
931*0c4d7b72SSadaf Ebrahimi        FileUtils#copyDirectory(File, File, FileFilter, preserveFileDate) clean up #163.
932*0c4d7b72SSadaf Ebrahimi      </action>
933*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
934*0c4d7b72SSadaf Ebrahimi        AccumulatorPathVisitor does not track directories properly.
935*0c4d7b72SSadaf Ebrahimi      </action>
936*0c4d7b72SSadaf Ebrahimi      <action issue="IO-597" dev="ggregory" type="fix" due-to="Gary Gregory, Arvind, Rob Spoor">
937*0c4d7b72SSadaf Ebrahimi        FileUtils.iterateFiles runs out of memory when executed for a directory with large number of files.
938*0c4d7b72SSadaf Ebrahimi        Re-implement FileUtils' iterateFiles(), iterateFilesAndDirs(), listFiles(), listFilesAndDirs() to use NIO
939*0c4d7b72SSadaf Ebrahimi        file tree walking instead of IO file listings to avoid memory consumption issues on large file trees.
940*0c4d7b72SSadaf Ebrahimi      </action>
941*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
942*0c4d7b72SSadaf Ebrahimi        FileUtils.forceDelete(File) actually forces deletion of read-only files as it did in version 2.6.
943*0c4d7b72SSadaf Ebrahimi      </action>
944*0c4d7b72SSadaf Ebrahimi      <action issue="IO-692" dev="ebourg" type="fix" due-to="Matthew Rooney, Emmanuel Bourg">
945*0c4d7b72SSadaf Ebrahimi        PathUtils.deleteFile() no longer throws a NoSuchFileException when applied on a symbolic link pointing
946*0c4d7b72SSadaf Ebrahimi        to a file that doesn't exist.
947*0c4d7b72SSadaf Ebrahimi      </action>
948*0c4d7b72SSadaf Ebrahimi      <action issue="IO-694" dev="ggregory" type="fix" due-to="Tan Yee Fan, Gary Gregory">
949*0c4d7b72SSadaf Ebrahimi        Behavior change in FileUtils.copyDirectory() file last modified timestamp preservation. Match Javadoc to code.
950*0c4d7b72SSadaf Ebrahimi      </action>
951*0c4d7b72SSadaf Ebrahimi      <action issue="IO-600" dev="ggregory" type="fix" due-to="Abhyankar Chaubey, Gary Gregory">
952*0c4d7b72SSadaf Ebrahimi        Fix getPrefixLength method for Linux filename #179.
953*0c4d7b72SSadaf Ebrahimi      </action>
954*0c4d7b72SSadaf Ebrahimi      <action issue="IO-699" dev="ggregory" type="fix" due-to="tza, Gary Gregory">
955*0c4d7b72SSadaf Ebrahimi        Wrong logging in FileUtils.setLastModified.
956*0c4d7b72SSadaf Ebrahimi      </action>
957*0c4d7b72SSadaf Ebrahimi      <action issue="IO-686" dev="ggregory" type="fix" due-to="Alan Moffat, Sebb, Gary Gregory">
958*0c4d7b72SSadaf Ebrahimi        IOUtils.toByteArray(InputStream) Javadoc does not match code.
959*0c4d7b72SSadaf Ebrahimi      </action>
960*0c4d7b72SSadaf Ebrahimi      <action issue="IO-688" dev="ggregory" type="fix" due-to="Michael Ernst, Gary Gregory">
961*0c4d7b72SSadaf Ebrahimi        CopyUtils deprecation message gives wrong version.
962*0c4d7b72SSadaf Ebrahimi      </action>
963*0c4d7b72SSadaf Ebrahimi      <action issue="IO-701" dev="ggregory" type="fix" due-to="Gary Gregory">
964*0c4d7b72SSadaf Ebrahimi        Make PathUtils.setReadOnly deal with LinuxDosFileAttributeView #186.
965*0c4d7b72SSadaf Ebrahimi      </action>
966*0c4d7b72SSadaf Ebrahimi      <action issue="IO-702" dev="ggregory" type="fix" due-to="Boris Unckel, Gary Gregory">
967*0c4d7b72SSadaf Ebrahimi        FileUtils.forceDelete does not delete invalid links. #187.
968*0c4d7b72SSadaf Ebrahimi      </action>
969*0c4d7b72SSadaf Ebrahimi      <action issue="IO-690" dev="ggregory" type="fix" due-to="Chris Heisterkamp, Gary Gregory">
970*0c4d7b72SSadaf Ebrahimi        IOUtils.toByteArray(null) no longer throws a NullPointerException.
971*0c4d7b72SSadaf Ebrahimi      </action>
972*0c4d7b72SSadaf Ebrahimi      <action issue="IO-705" dev="ggregory" type="fix" due-to="Hao Zhong, Gary Gregory">
973*0c4d7b72SSadaf Ebrahimi        MarkShieldInputStream#reset should throw UnsupportedOperationException.
974*0c4d7b72SSadaf Ebrahimi      </action>
975*0c4d7b72SSadaf Ebrahimi      <action issue="IO-705" dev="ggregory" type="fix" due-to="Hao Zhong, Gary Gregory">
976*0c4d7b72SSadaf Ebrahimi        LockableFileWriter.close() should fail when the lock file cannot be deleted.
977*0c4d7b72SSadaf Ebrahimi      </action>
978*0c4d7b72SSadaf Ebrahimi      <action issue="IO-705" dev="ggregory" type="fix" due-to="Hao Zhong, Gary Gregory">
979*0c4d7b72SSadaf Ebrahimi        Fix infinite loops in ObservableInputStream read(*) when an exception is caught but not re-thrown.
980*0c4d7b72SSadaf Ebrahimi      </action>
981*0c4d7b72SSadaf Ebrahimi      <action issue="IO-719" dev="ggregory" type="fix" due-to="Andrew Shcheglov, Gary Gregory">
982*0c4d7b72SSadaf Ebrahimi        Fixed error of copying directories between different file systems #203.
983*0c4d7b72SSadaf Ebrahimi      </action>
984*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Felix Rilling">
985*0c4d7b72SSadaf Ebrahimi        Fix Typos in JavaDoc, Comments and Tests #201.
986*0c4d7b72SSadaf Ebrahimi      </action>
987*0c4d7b72SSadaf Ebrahimi      <action issue="IO-718" dev="ggregory" type="fix" due-to="Robert Cooper, Gary Gregory">
988*0c4d7b72SSadaf Ebrahimi        FileUtils.checksumCRC32 and FileUtils.checksum are not thread safe.
989*0c4d7b72SSadaf Ebrahimi      </action>
990*0c4d7b72SSadaf Ebrahimi      <action issue="IO-720" dev="ggregory" type="fix" due-to="XenoAmess">
991*0c4d7b72SSadaf Ebrahimi        Fix error about usage of DirectBuffer in JRE 16/17 #205.
992*0c4d7b72SSadaf Ebrahimi      </action>
993*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Rob Spoor, Gary Gregory">
994*0c4d7b72SSadaf Ebrahimi        Prevent infinite loop with AbstractCharacterFilterReader if EOF is filtered out #226.
995*0c4d7b72SSadaf Ebrahimi      </action>
996*0c4d7b72SSadaf Ebrahimi      <action issue="IO-429" dev="ggregory" type="fix" due-to="Ivan Leskin, Ivan Leskin">
997*0c4d7b72SSadaf Ebrahimi        Check for long streams in IOUtils.toByteArray #175.
998*0c4d7b72SSadaf Ebrahimi      </action>
999*0c4d7b72SSadaf Ebrahimi      <!-- ADD -->
1000*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1001*0c4d7b72SSadaf Ebrahimi        Add FileSystemProviders class.
1002*0c4d7b72SSadaf Ebrahimi      </action>
1003*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1004*0c4d7b72SSadaf Ebrahimi        Let org.apache.commons.io.filefilter classes work with java.nio.file.Files.walk* APIs.
1005*0c4d7b72SSadaf Ebrahimi      </action>
1006*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1007*0c4d7b72SSadaf Ebrahimi        Let org.apache.commons.io.filefilter classes work with java.nio.file.Files#newDirectoryStream(Path, DirectoryStream.Filter).
1008*0c4d7b72SSadaf Ebrahimi      </action>
1009*0c4d7b72SSadaf Ebrahimi      <action issue="IO-510" dev="ggregory" type="add" due-to="Gary Gregory, Apache Spark, David Mollitor">
1010*0c4d7b72SSadaf Ebrahimi        Add and adapt ReadAheadInputStream and BufferedFileChannelInputStream from Apache Spark.
1011*0c4d7b72SSadaf Ebrahimi      </action>
1012*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1013*0c4d7b72SSadaf Ebrahimi        Add PathUtils.createParentDirectories(Path, FileAttribute...).
1014*0c4d7b72SSadaf Ebrahimi      </action>
1015*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Rob Spoor, Gary Gregory">
1016*0c4d7b72SSadaf Ebrahimi        Add factory methods to CloseShieldInputStream, CloseShieldReader, CloseShieldOutputStream, CloseShieldWriter, #173.
1017*0c4d7b72SSadaf Ebrahimi      </action>
1018*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="maxxedev, Gary Gregory">
1019*0c4d7b72SSadaf Ebrahimi        Add QueueInputStream and QueueOutputStream as simpler alternatives to PipedInputStream and PipedOutputStream #171.
1020*0c4d7b72SSadaf Ebrahimi      </action>
1021*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1022*0c4d7b72SSadaf Ebrahimi        Add StandardLineSeparator.
1023*0c4d7b72SSadaf Ebrahimi      </action>
1024*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1025*0c4d7b72SSadaf Ebrahimi        Replace magic numbers with constants with the new IOUtils.CR and LF.
1026*0c4d7b72SSadaf Ebrahimi      </action>
1027*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1028*0c4d7b72SSadaf Ebrahimi        Add FileSystem#supportsDriveLetter().
1029*0c4d7b72SSadaf Ebrahimi      </action>
1030*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1031*0c4d7b72SSadaf Ebrahimi        Add FileUtils.delete(File).
1032*0c4d7b72SSadaf Ebrahimi      </action>
1033*0c4d7b72SSadaf Ebrahimi      <action issue="IO-700" dev="ggregory" type="add" due-to="Gary Gregory">
1034*0c4d7b72SSadaf Ebrahimi        Add FileUtils.moveFile(File, File, CopyOption...) #185.
1035*0c4d7b72SSadaf Ebrahimi      </action>
1036*0c4d7b72SSadaf Ebrahimi      <action issue="IO-700" dev="ggregory" type="add" due-to="Gary Gregory">
1037*0c4d7b72SSadaf Ebrahimi        Add FileUtils.isEmptyDirectory(File).
1038*0c4d7b72SSadaf Ebrahimi      </action>
1039*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1040*0c4d7b72SSadaf Ebrahimi        Add FileUtils.lastModified[Unchecked](File) to workaround https://bugs.openjdk.java.net/browse/JDK-8177809.
1041*0c4d7b72SSadaf Ebrahimi      </action>
1042*0c4d7b72SSadaf Ebrahimi      <action issue="IO-709" dev="ggregory" type="add" due-to="Boris Unckel, Gary Gregory">
1043*0c4d7b72SSadaf Ebrahimi        Add null safe variants of isDirectory and isRegularFile.
1044*0c4d7b72SSadaf Ebrahimi      </action>
1045*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1046*0c4d7b72SSadaf Ebrahimi        Add and use IOExceptionList(String, List).
1047*0c4d7b72SSadaf Ebrahimi      </action>
1048*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1049*0c4d7b72SSadaf Ebrahimi        Add and use ObservableInputStream.ObservableInputStream(InputStream, Observer...).
1050*0c4d7b72SSadaf Ebrahimi      </action>
1051*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1052*0c4d7b72SSadaf Ebrahimi        Make ObservableInputStream.getObservers() public.
1053*0c4d7b72SSadaf Ebrahimi      </action>
1054*0c4d7b72SSadaf Ebrahimi      <action  issue="IO-706" dev="ggregory" type="add" due-to="Gary Gregory">
1055*0c4d7b72SSadaf Ebrahimi        Add TimestampedObserver.
1056*0c4d7b72SSadaf Ebrahimi      </action>
1057*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1058*0c4d7b72SSadaf Ebrahimi        Add and use IOUtils.byteArray(*).
1059*0c4d7b72SSadaf Ebrahimi      </action>
1060*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1061*0c4d7b72SSadaf Ebrahimi        Make public and reuse IOUtils.EMPTY_BYTE_ARRAY.
1062*0c4d7b72SSadaf Ebrahimi      </action>
1063*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1064*0c4d7b72SSadaf Ebrahimi        Add IOUtils.copy(URL, File).
1065*0c4d7b72SSadaf Ebrahimi      </action>
1066*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1067*0c4d7b72SSadaf Ebrahimi        Add copy(URL, OutputStream).
1068*0c4d7b72SSadaf Ebrahimi      </action>
1069*0c4d7b72SSadaf Ebrahimi      <action issue="IO-651" dev="ggregory" type="add" due-to="jmark109, Gary Gregory">
1070*0c4d7b72SSadaf Ebrahimi        Add DeferredFileOutputStream.toInputStream() #206.
1071*0c4d7b72SSadaf Ebrahimi      </action>
1072*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1073*0c4d7b72SSadaf Ebrahimi        Add CharacterSetFilterReader.CharacterSetFilterReader(Reader, Integer...).
1074*0c4d7b72SSadaf Ebrahimi      </action>
1075*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Rob Spoor, Gary Gregory">
1076*0c4d7b72SSadaf Ebrahimi        Add AbstractCharacterFilterReader(Reader, IntPredicate), #227.
1077*0c4d7b72SSadaf Ebrahimi        Add CharacterFilterReader(Reader, IntPredicate), #227.
1078*0c4d7b72SSadaf Ebrahimi        Add CharacterFilterReaderIntPredicateTest, #227.
1079*0c4d7b72SSadaf Ebrahimi      </action>
1080*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1081*0c4d7b72SSadaf Ebrahimi        Add IOConsumer.noop().
1082*0c4d7b72SSadaf Ebrahimi      </action>
1083*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1084*0c4d7b72SSadaf Ebrahimi        Add constructor ThresholdingOutputStream(int, IOConsumer, IOFunction) and make the class concrete.
1085*0c4d7b72SSadaf Ebrahimi      </action>
1086*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="nstdspace, Gary Gregory">
1087*0c4d7b72SSadaf Ebrahimi        Add constructor accepting collection of file alteration observers #236.
1088*0c4d7b72SSadaf Ebrahimi      </action>
1089*0c4d7b72SSadaf Ebrahimi      <!-- UPDATES -->
1090*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
1091*0c4d7b72SSadaf Ebrahimi        Update junit-jupiter from 5.6.2 to 5.7.0 #153.
1092*0c4d7b72SSadaf Ebrahimi      </action>
1093*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
1094*0c4d7b72SSadaf Ebrahimi        Update mockito-core from 3.5.9 to 3.10.0, #152, #155, #157, #166, #167, #169, #182.
1095*0c4d7b72SSadaf Ebrahimi      </action>
1096*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
1097*0c4d7b72SSadaf Ebrahimi        Bump mockito-inline from 3.7.0 to 3.10.0 #188, #207, #230.
1098*0c4d7b72SSadaf Ebrahimi      </action>
1099*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
1100*0c4d7b72SSadaf Ebrahimi        Update commons.jacoco.version 0.8.5 to 0.8.7, fixes Java 15 builds and up.
1101*0c4d7b72SSadaf Ebrahimi      </action>
1102*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
1103*0c4d7b72SSadaf Ebrahimi        Update spotbugs from 4.1.2 to 4.5.0, #158, #164, #165, #180, #199, #213, #224, #302.
1104*0c4d7b72SSadaf Ebrahimi      </action>
1105*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
1106*0c4d7b72SSadaf Ebrahimi        Bump spotbugs-maven-plugin from 4.0.4 to 4.2.3, #161, #172, #223.
1107*0c4d7b72SSadaf Ebrahimi      </action>
1108*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
1109*0c4d7b72SSadaf Ebrahimi        Update org.junit-pioneer:junit-pioneer 0.9.0 -> 1.4,1, #159, #162, #170, #189, #191, #210, #229.
1110*0c4d7b72SSadaf Ebrahimi      </action>
1111*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
1112*0c4d7b72SSadaf Ebrahimi        Update actions/checkout from v2.3.2 to v2.3.4, #156, #168.
1113*0c4d7b72SSadaf Ebrahimi      </action>
1114*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
1115*0c4d7b72SSadaf Ebrahimi        Bump actions/setup-java from v1.4.2 to v2 #160.
1116*0c4d7b72SSadaf Ebrahimi      </action>
1117*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
1118*0c4d7b72SSadaf Ebrahimi        Update maven-surefire-plugin from 2.22.2 to 3.0.0-M5.
1119*0c4d7b72SSadaf Ebrahimi      </action>
1120*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Arturo Bernal">
1121*0c4d7b72SSadaf Ebrahimi        Minor improvements, #176, 177, #190.
1122*0c4d7b72SSadaf Ebrahimi      </action>
1123*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
1124*0c4d7b72SSadaf Ebrahimi        Update commons.japicmp.version 0.14.4 -> 0.15.3.
1125*0c4d7b72SSadaf Ebrahimi      </action>
1126*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Michiel Kalkman">
1127*0c4d7b72SSadaf Ebrahimi        Tiny performance improvement in FileUtils#moveDirectoryToDirectory() #174.
1128*0c4d7b72SSadaf Ebrahimi      </action>
1129*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
1130*0c4d7b72SSadaf Ebrahimi        Bump checkstyle from 8.38 to 8.42 #689, #209, #225.
1131*0c4d7b72SSadaf Ebrahimi      </action>
1132*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
1133*0c4d7b72SSadaf Ebrahimi        Bump maven-checkstyle-plugin from 3.1.1 to 3.1.2 #198.
1134*0c4d7b72SSadaf Ebrahimi      </action>
1135*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
1136*0c4d7b72SSadaf Ebrahimi        Bump jimfs from 1.1 to 1.2 #183.
1137*0c4d7b72SSadaf Ebrahimi      </action>
1138*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="XenoAmess, Gary Gregory">
1139*0c4d7b72SSadaf Ebrahimi        Improve performance of IOUtils.contentEquals(InputStream, InputStream).
1140*0c4d7b72SSadaf Ebrahimi      </action>
1141*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="XenoAmess, Gary Gregory">
1142*0c4d7b72SSadaf Ebrahimi        Improve performance of IOUtils.contentEquals(Reader, Reader).
1143*0c4d7b72SSadaf Ebrahimi      </action>
1144*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
1145*0c4d7b72SSadaf Ebrahimi        Bump actions/cache from v2 to v2.1.5 #202, #228.
1146*0c4d7b72SSadaf Ebrahimi      </action>
1147*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
1148*0c4d7b72SSadaf Ebrahimi        Bump junit-bom from 5.7.0 to 5.7.2 #200, #232.
1149*0c4d7b72SSadaf Ebrahimi      </action>
1150*0c4d7b72SSadaf Ebrahimi      <action type="update" dev="ggregory" due-to="Gary Gregory">
1151*0c4d7b72SSadaf Ebrahimi        Update from Apache Commons Lang 3.11 to 3.12.0.
1152*0c4d7b72SSadaf Ebrahimi      </action>
1153*0c4d7b72SSadaf Ebrahimi      <action type="update" dev="ggregory" due-to="Arturo Bernal">
1154*0c4d7b72SSadaf Ebrahimi        Minor improvements #233.
1155*0c4d7b72SSadaf Ebrahimi      </action>
1156*0c4d7b72SSadaf Ebrahimi      <action type="update" dev="ggregory" due-to="Arturo Bernal">
1157*0c4d7b72SSadaf Ebrahimi        Simplify Assertions in tests #234.
1158*0c4d7b72SSadaf Ebrahimi      </action>
1159*0c4d7b72SSadaf Ebrahimi    </release>
1160*0c4d7b72SSadaf Ebrahimi    <!-- The release date is the date RC is cut -->
1161*0c4d7b72SSadaf Ebrahimi    <release version="2.8.0" date="2020-09-05" description="Java 8 is required.">
1162*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1163*0c4d7b72SSadaf Ebrahimi        Add org.apache.commons.io.input.CircularInputStream.
1164*0c4d7b72SSadaf Ebrahimi      </action>
1165*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1166*0c4d7b72SSadaf Ebrahimi        Add org.apache.commons.io.file.PathUtils.cleanDirectory(Path, FileVisitOption...).
1167*0c4d7b72SSadaf Ebrahimi      </action>
1168*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1169*0c4d7b72SSadaf Ebrahimi        Add org.apache.commons.io.file.PathUtils.deleteDirectory(Path, FileVisitOption...).
1170*0c4d7b72SSadaf Ebrahimi      </action>
1171*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1172*0c4d7b72SSadaf Ebrahimi        Add NullAppendable.
1173*0c4d7b72SSadaf Ebrahimi      </action>
1174*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Rob Spoor, Jochen Wiedmann">
1175*0c4d7b72SSadaf Ebrahimi        CharSequenceReader.skip should return 0 instead of EOF on stream end #123.
1176*0c4d7b72SSadaf Ebrahimi      </action>
1177*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Rob Spoor">
1178*0c4d7b72SSadaf Ebrahimi        Implement CharSequenceReader.ready() #122.
1179*0c4d7b72SSadaf Ebrahimi      </action>
1180*0c4d7b72SSadaf Ebrahimi      <action issue="IO-669" dev="ggregory" type="fix" due-to="XenoAmess, Gary Gregory">
1181*0c4d7b72SSadaf Ebrahimi        Fix code smells; fix typos #115.
1182*0c4d7b72SSadaf Ebrahimi      </action>
1183*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Jerome Wolff, Gary Gregory">
1184*0c4d7b72SSadaf Ebrahimi        Add caching for required charsets #120.
1185*0c4d7b72SSadaf Ebrahimi      </action>
1186*0c4d7b72SSadaf Ebrahimi      <action issue="IO-673" type="fix" dev="ggregory" due-to="Jerome Wolff">
1187*0c4d7b72SSadaf Ebrahimi        Make some simplifications #121.
1188*0c4d7b72SSadaf Ebrahimi      </action>
1189*0c4d7b72SSadaf Ebrahimi      <action issue="IO-674" dev="ggregory" type="fix" due-to="Gary Gregory">
1190*0c4d7b72SSadaf Ebrahimi        InfiniteCircularInputStream is not infinite if its input buffer contains -1.
1191*0c4d7b72SSadaf Ebrahimi      </action>
1192*0c4d7b72SSadaf Ebrahimi      <action issue="IO-675" dev="ggregory" type="fix" due-to="Gary Gregory">
1193*0c4d7b72SSadaf Ebrahimi        InfiniteCircularInputStream throws a divide-by-zero exception when reading if its input buffer is size 0.
1194*0c4d7b72SSadaf Ebrahimi      </action>
1195*0c4d7b72SSadaf Ebrahimi      <action issue="IO-677" dev="ggregory" type="fix" due-to="Gary Gregory">
1196*0c4d7b72SSadaf Ebrahimi        FileSystem.getCurrent() does not return the correct enum.
1197*0c4d7b72SSadaf Ebrahimi      </action>
1198*0c4d7b72SSadaf Ebrahimi      <action issue="IO-679" dev="ggregory" type="fix" due-to="proneel">
1199*0c4d7b72SSadaf Ebrahimi        input.AbstractCharacterFilterReader passes count of chars read #132.
1200*0c4d7b72SSadaf Ebrahimi      </action>
1201*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1202*0c4d7b72SSadaf Ebrahimi        Add PathUtils.getAclEntryList(Path).
1203*0c4d7b72SSadaf Ebrahimi      </action>
1204*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1205*0c4d7b72SSadaf Ebrahimi        Null-guard IOUtils.close(Closeable, IOConsumer).
1206*0c4d7b72SSadaf Ebrahimi      </action>
1207*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1208*0c4d7b72SSadaf Ebrahimi        Add ReversedLinesFileReader.readLines(int).
1209*0c4d7b72SSadaf Ebrahimi      </action>
1210*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1211*0c4d7b72SSadaf Ebrahimi        Add ReversedLinesFileReader.toString(int).
1212*0c4d7b72SSadaf Ebrahimi      </action>
1213*0c4d7b72SSadaf Ebrahimi      <action issue="IO-684" dev="ggregory" type="add" due-to="Gary Gregory, Robin Jansohn">
1214*0c4d7b72SSadaf Ebrahimi        Add PathUtils.delete(Path, DeleteOption...).
1215*0c4d7b72SSadaf Ebrahimi        Add PathUtils.deleteDirectory(Path, DeleteOption...).
1216*0c4d7b72SSadaf Ebrahimi        Add PathUtils.deleteFile(Path, DeleteOption...).
1217*0c4d7b72SSadaf Ebrahimi        Add PathUtils.setReadOnly(Path, boolean, LinkOption...).
1218*0c4d7b72SSadaf Ebrahimi        Add CleaningPathVisitor.CleaningPathVisitor(PathCounters, DeleteOption[], String...).
1219*0c4d7b72SSadaf Ebrahimi        Add DeletingPathVisitor.DeletingPathVisitor(PathCounters, DeleteOption[], String...).
1220*0c4d7b72SSadaf Ebrahimi      </action>
1221*0c4d7b72SSadaf Ebrahimi      <action issue="IO-683" dev="sebb" type="fix">
1222*0c4d7b72SSadaf Ebrahimi        CircularBufferInputStream.read() fails to convert byte to unsigned int
1223*0c4d7b72SSadaf Ebrahimi      </action>
1224*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="fix" due-to="Gary Gregory">
1225*0c4d7b72SSadaf Ebrahimi        Fix SpotBugs issues in org.apache.commons.io.FileUtils.
1226*0c4d7b72SSadaf Ebrahimi      </action>
1227*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1228*0c4d7b72SSadaf Ebrahimi        Add RandomAccessFileInputStream.
1229*0c4d7b72SSadaf Ebrahimi      </action>
1230*0c4d7b72SSadaf Ebrahimi      <action issue="IO-681" dev="sebb" type="add">
1231*0c4d7b72SSadaf Ebrahimi        IOUtils.close(Closeable) should allow a list of closeables.
1232*0c4d7b72SSadaf Ebrahimi      </action>
1233*0c4d7b72SSadaf Ebrahimi      <action issue="IO-672" dev="sebb" type="fix">
1234*0c4d7b72SSadaf Ebrahimi        Copying a File sets last modified date to 01 January 1970.
1235*0c4d7b72SSadaf Ebrahimi      </action>
1236*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1237*0c4d7b72SSadaf Ebrahimi        Add IOUtils.consume(InputStream).
1238*0c4d7b72SSadaf Ebrahimi      </action>
1239*0c4d7b72SSadaf Ebrahimi      <action issue="IO-676" dev="ggregory" type="add" due-to="Isira Seneviratne, Gary Gregory">
1240*0c4d7b72SSadaf Ebrahimi        Add isFileNewer() and isFileOlder() methods that support the Java 8 Date/Time API. #124.
1241*0c4d7b72SSadaf Ebrahimi      </action>
1242*0c4d7b72SSadaf Ebrahimi      <action issue="IO-676" dev="ggregory" type="fix" due-to="Michael Ernst, Gary Gregory">
1243*0c4d7b72SSadaf Ebrahimi        Prevent NullPointerException in ReversedLinesFileReader constructors #117.
1244*0c4d7b72SSadaf Ebrahimi      </action>
1245*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Adam Retter, Gary Gregory">
1246*0c4d7b72SSadaf Ebrahimi        Add a MarkShieldInputStream #119.
1247*0c4d7b72SSadaf Ebrahimi      </action>
1248*0c4d7b72SSadaf Ebrahimi      <!-- UPDATES -->
1249*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" due-to="Gary Gregory">
1250*0c4d7b72SSadaf Ebrahimi        Deprecate IOUtils.LINE_SEPARATOR in favor of Java 7's System.lineSeparator().
1251*0c4d7b72SSadaf Ebrahimi      </action>
1252*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
1253*0c4d7b72SSadaf Ebrahimi        Replace FindBugs with SpotBugs.
1254*0c4d7b72SSadaf Ebrahimi      </action>
1255*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
1256*0c4d7b72SSadaf Ebrahimi        maven-checkstyle-plugin 3.1.0 -> 3.1.1.
1257*0c4d7b72SSadaf Ebrahimi      </action>
1258*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
1259*0c4d7b72SSadaf Ebrahimi        Update tests from org.apache.commons:commons-lang3 3.10 to 3.11.
1260*0c4d7b72SSadaf Ebrahimi      </action>
1261*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
1262*0c4d7b72SSadaf Ebrahimi        Update commons-parent from 50 to 51 #129.
1263*0c4d7b72SSadaf Ebrahimi      </action>
1264*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
1265*0c4d7b72SSadaf Ebrahimi        Update actions/checkout from v1 to v2.3.1 #126.
1266*0c4d7b72SSadaf Ebrahimi      </action>
1267*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
1268*0c4d7b72SSadaf Ebrahimi        Update junit-pioneer from 0.6.0 to 0.9.0, #127, #135, #138.
1269*0c4d7b72SSadaf Ebrahimi      </action>
1270*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Gary Gregory">
1271*0c4d7b72SSadaf Ebrahimi        Update mockito-core from 3.3.3 to 3.5.9 #128, #133, #145, #149, #151.
1272*0c4d7b72SSadaf Ebrahimi      </action>
1273*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
1274*0c4d7b72SSadaf Ebrahimi        Update spotbugs from 4.0.6 to 4.6.0 #134, #332.
1275*0c4d7b72SSadaf Ebrahimi      </action>
1276*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
1277*0c4d7b72SSadaf Ebrahimi        Update actions/checkout from v2.3.1 to v2.3.2 #140.
1278*0c4d7b72SSadaf Ebrahimi      </action>
1279*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Dependabot">
1280*0c4d7b72SSadaf Ebrahimi        Update actions/setup-java from v1.4.0 to v1.4.2 #141, #148.
1281*0c4d7b72SSadaf Ebrahimi      </action>
1282*0c4d7b72SSadaf Ebrahimi      <action type="update" dev="ggregory" due-to="Gary Gregory">
1283*0c4d7b72SSadaf Ebrahimi        Update com.github.siom79.japicmp:japicmp-maven-plugin 0.14.3 -> 0.14.4.
1284*0c4d7b72SSadaf Ebrahimi      </action>
1285*0c4d7b72SSadaf Ebrahimi    </release>
1286*0c4d7b72SSadaf Ebrahimi    <!-- The release date is the date RC is cut -->
1287*0c4d7b72SSadaf Ebrahimi    <release version="2.7" date="2020-05-24" description="Java 8 is required.">
1288*0c4d7b72SSadaf Ebrahimi      <action issue="IO-589" dev="sebb" type="fix">
1289*0c4d7b72SSadaf Ebrahimi        Some tests fail if the base path contains a space.
1290*0c4d7b72SSadaf Ebrahimi      </action>
1291*0c4d7b72SSadaf Ebrahimi      <action dev="jochen" type="add">
1292*0c4d7b72SSadaf Ebrahimi        Adding the CircularBufferInputStream, and the PeekableInputStream.
1293*0c4d7b72SSadaf Ebrahimi      </action>
1294*0c4d7b72SSadaf Ebrahimi      <action issue="IO-582" dev="jochen" type="fix" due-to="Bruno Palos">
1295*0c4d7b72SSadaf Ebrahimi        Make methods in ObservableInputStream.Observer public.
1296*0c4d7b72SSadaf Ebrahimi      </action>
1297*0c4d7b72SSadaf Ebrahimi      <action issue="IO-535" dev="pschumacher" type="fix" due-to="Svetlin Zarev, Anthony Raymond">
1298*0c4d7b72SSadaf Ebrahimi        Thread bug in FileAlterationMonitor#stop(int).
1299*0c4d7b72SSadaf Ebrahimi      </action>
1300*0c4d7b72SSadaf Ebrahimi      <action issue="IO-553" dev="ggregory" type="add">
1301*0c4d7b72SSadaf Ebrahimi        Add org.apache.commons.io.FilenameUtils.isIllegalWindowsFileName(char).
1302*0c4d7b72SSadaf Ebrahimi      </action>
1303*0c4d7b72SSadaf Ebrahimi      <action issue="IO-557" dev="pschumacher" type="fix" due-to="luccioman">
1304*0c4d7b72SSadaf Ebrahimi        Perform locale independent upper case conversions.
1305*0c4d7b72SSadaf Ebrahimi      </action>
1306*0c4d7b72SSadaf Ebrahimi      <action issue="IO-570" dev="ggregory" type="fix" due-to="Pranet Verma">
1307*0c4d7b72SSadaf Ebrahimi        Missing Javadoc in FilenameUtils causing Travis-CI build to fail.
1308*0c4d7b72SSadaf Ebrahimi      </action>
1309*0c4d7b72SSadaf Ebrahimi      <action issue="IO-571" dev="ggregory" type="fix" due-to="pranet">
1310*0c4d7b72SSadaf Ebrahimi        Remove redundant isDirectory() check in org.apache.commons.io.FileUtils.listFilesAndDirs(File, IOFileFilter, IOFileFilter).
1311*0c4d7b72SSadaf Ebrahimi      </action>
1312*0c4d7b72SSadaf Ebrahimi      <action issue="IO-572" dev="ggregory" type="update" due-to="Pranet Verma">
1313*0c4d7b72SSadaf Ebrahimi        Refactor duplicate code in org.apache.commons.io.FileUtils.
1314*0c4d7b72SSadaf Ebrahimi      </action>
1315*0c4d7b72SSadaf Ebrahimi      <action issue="IO-577" dev="ggregory" type="add" due-to="Gary Gregory">
1316*0c4d7b72SSadaf Ebrahimi        Add readers to filter out given characters: CharacterSetFilterReader and CharacterFilterReader.
1317*0c4d7b72SSadaf Ebrahimi      </action>
1318*0c4d7b72SSadaf Ebrahimi      <action issue="IO-559" type="fix">
1319*0c4d7b72SSadaf Ebrahimi        FilenameUtils.normalize now verifies hostname syntax in UNC path.
1320*0c4d7b72SSadaf Ebrahimi      </action>
1321*0c4d7b72SSadaf Ebrahimi      <action issue="IO-580" dev="ggregory" type="update">
1322*0c4d7b72SSadaf Ebrahimi        Update org.apache.commons.io.FilenameUtils.isExtension(String, String[]) to use var args.
1323*0c4d7b72SSadaf Ebrahimi      </action>
1324*0c4d7b72SSadaf Ebrahimi      <action issue="IO-554" dev="ggregory" type="fix" due-to="Michele Mariotti">
1325*0c4d7b72SSadaf Ebrahimi        FileUtils.copyToFile(InputStream source, File destination) should not close input stream.
1326*0c4d7b72SSadaf Ebrahimi      </action>
1327*0c4d7b72SSadaf Ebrahimi      <action issue="IO-594" dev="ggregory" type="add" due-to="Gary Gregory">
1328*0c4d7b72SSadaf Ebrahimi        Add IOUtils copy methods with java.lang.Appendable as the target.
1329*0c4d7b72SSadaf Ebrahimi      </action>
1330*0c4d7b72SSadaf Ebrahimi      <action issue="IO-604" dev="ggregory" type="fix" due-to="Gary Gregory">
1331*0c4d7b72SSadaf Ebrahimi        FileUtils.doCopyFile(File, File, boolean) can throw ClosedByInterruptException.
1332*0c4d7b72SSadaf Ebrahimi      </action>
1333*0c4d7b72SSadaf Ebrahimi      <action issue="IO-605" dev="ggregory" type="add" due-to="Gary Gregory">
1334*0c4d7b72SSadaf Ebrahimi        Add class CanExecuteFileFilter.
1335*0c4d7b72SSadaf Ebrahimi      </action>
1336*0c4d7b72SSadaf Ebrahimi      <action issue="IO-701" dev="ggregory" type="update" due-to="Raymond Tan">
1337*0c4d7b72SSadaf Ebrahimi        Make array declaration in ThresholdingOutputStream consistent with other array declarations in the library #77.
1338*0c4d7b72SSadaf Ebrahimi      </action>
1339*0c4d7b72SSadaf Ebrahimi      <action issue="IO-578" dev="ggregory" type="add" due-to="Mark Chesney">
1340*0c4d7b72SSadaf Ebrahimi        Support java.nio.Path and non-default file systems for ReversedLinesFileReader (#62).
1341*0c4d7b72SSadaf Ebrahimi      </action>
1342*0c4d7b72SSadaf Ebrahimi      <action issue="IO-608" dev="ggregory" type="add" due-to="Gary Gregory">
1343*0c4d7b72SSadaf Ebrahimi        Add a convenience NullPrintStream.
1344*0c4d7b72SSadaf Ebrahimi      </action>
1345*0c4d7b72SSadaf Ebrahimi      <action issue="IO-607" dev="ggregory" type="update" due-to="Gary Gregory">
1346*0c4d7b72SSadaf Ebrahimi        Update from Java 7 to Java 8.
1347*0c4d7b72SSadaf Ebrahimi      </action>
1348*0c4d7b72SSadaf Ebrahimi      <action issue="IO-610" dev="ggregory" type="update" due-to="Sebastian">
1349*0c4d7b72SSadaf Ebrahimi        Remove throws IOException in method isSymlink() #80.
1350*0c4d7b72SSadaf Ebrahimi      </action>
1351*0c4d7b72SSadaf Ebrahimi      <action issue="IO-612" dev="ggregory" type="add" due-to="Rob Spoor, Gary Gregory">
1352*0c4d7b72SSadaf Ebrahimi        Add class TeeReader.
1353*0c4d7b72SSadaf Ebrahimi      </action>
1354*0c4d7b72SSadaf Ebrahimi      <action issue="IO-613" dev="ggregory" type="add" due-to="Rob Spoor, Gary Gregory">
1355*0c4d7b72SSadaf Ebrahimi        Add classes ClosedReader and CloseShieldReader. #84.
1356*0c4d7b72SSadaf Ebrahimi      </action>
1357*0c4d7b72SSadaf Ebrahimi      <action issue="IO-614" dev="ggregory" type="add" due-to="Rob Spoor">
1358*0c4d7b72SSadaf Ebrahimi        Add classes TaggedWriter, ClosedWriter and BrokenWriter. #86.
1359*0c4d7b72SSadaf Ebrahimi      </action>
1360*0c4d7b72SSadaf Ebrahimi      <action issue="IO-615" dev="ggregory" type="add" due-to="Gary Gregory, Rob Spoor">
1361*0c4d7b72SSadaf Ebrahimi        Add classes TeeWriter, FilterCollectionWriter, ProxyCollectionWriter, IOExceptionList, IOIndexedException.
1362*0c4d7b72SSadaf Ebrahimi      </action>
1363*0c4d7b72SSadaf Ebrahimi      <action issue="IO-616" dev="ggregory" type="add" due-to="Rob Spoor">
1364*0c4d7b72SSadaf Ebrahimi        Add class AppendableWriter. #87.
1365*0c4d7b72SSadaf Ebrahimi      </action>
1366*0c4d7b72SSadaf Ebrahimi      <action issue="IO-617" dev="ggregory" type="add" due-to="Rob Spoor, Gary Gregory">
1367*0c4d7b72SSadaf Ebrahimi        Add class CloseShieldWriter. #83.
1368*0c4d7b72SSadaf Ebrahimi      </action>
1369*0c4d7b72SSadaf Ebrahimi      <action issue="IO-618" dev="ggregory" type="add" due-to="Rob Spoor">
1370*0c4d7b72SSadaf Ebrahimi        Add classes Added TaggedReader, ClosedReader and BrokenReader. #85.
1371*0c4d7b72SSadaf Ebrahimi      </action>
1372*0c4d7b72SSadaf Ebrahimi      <action issue="IO-619" dev="ggregory" type="add" due-to="Rob Spoor">
1373*0c4d7b72SSadaf Ebrahimi        Support sub sequences in CharSequenceReader. #91.
1374*0c4d7b72SSadaf Ebrahimi      </action>
1375*0c4d7b72SSadaf Ebrahimi      <action issue="IO-625" dev="ggregory" type="fix" due-to="Mikko Maunu">
1376*0c4d7b72SSadaf Ebrahimi        Corrected misleading exception message for FileUtils.copyDirectoryToDirectory.
1377*0c4d7b72SSadaf Ebrahimi      </action>
1378*0c4d7b72SSadaf Ebrahimi      <action issue="IO-626" dev="ggregory" type="fix" due-to="Yuji Konishi">
1379*0c4d7b72SSadaf Ebrahimi        A mistake in the FilenameUtils.concat()'s Javadoc about an absolute path.
1380*0c4d7b72SSadaf Ebrahimi      </action>
1381*0c4d7b72SSadaf Ebrahimi      <action issue="IO-628" dev="ggregory" type="update" due-to="Allon Mureinik">
1382*0c4d7b72SSadaf Ebrahimi        Migration to JUnit Jupiter #97.
1383*0c4d7b72SSadaf Ebrahimi      </action>
1384*0c4d7b72SSadaf Ebrahimi      <action issue="IO-630" dev="ggregory" type="update" due-to="Gary Gregory">
1385*0c4d7b72SSadaf Ebrahimi        Deprecate org.apache.commons.io.output.NullOutputStream.NullOutputStream() in favor of org.apache.commons.io.output.NullOutputStream.NULL_OUTPUT_STREAM.
1386*0c4d7b72SSadaf Ebrahimi      </action>
1387*0c4d7b72SSadaf Ebrahimi      <action issue="IO-631" dev="ggregory" type="add" due-to="Gary Gregory">
1388*0c4d7b72SSadaf Ebrahimi        Add a CountingFileVisitor (as the basis for a forthcoming DeletingFileVisitor).
1389*0c4d7b72SSadaf Ebrahimi      </action>
1390*0c4d7b72SSadaf Ebrahimi      <action issue="IO-632" dev="ggregory" type="add" due-to="Gary Gregory">
1391*0c4d7b72SSadaf Ebrahimi        Add PathUtils for operations on NIO Path.
1392*0c4d7b72SSadaf Ebrahimi      </action>
1393*0c4d7b72SSadaf Ebrahimi      <action issue="IO-633" dev="ggregory" type="add" due-to="Gary Gregory">
1394*0c4d7b72SSadaf Ebrahimi        Add DeletingFileVisitor.
1395*0c4d7b72SSadaf Ebrahimi      </action>
1396*0c4d7b72SSadaf Ebrahimi      <action issue="IO-629" dev="ggregory" type="update" due-to="Ian Springer, Ian Springer, Gary Gregory">
1397*0c4d7b72SSadaf Ebrahimi        FileUtils#forceDelete should use Files#delete rather than File#delete so exception messages includes reason for failure.
1398*0c4d7b72SSadaf Ebrahimi      </action>
1399*0c4d7b72SSadaf Ebrahimi      <action issue="IO-634" dev="ggregory" type="update" due-to="Václav Haisman, Bruno P. Kinoshita, Gary Gregory">
1400*0c4d7b72SSadaf Ebrahimi        Make getCause synchronized and use a Deque instead of a Stack #64.
1401*0c4d7b72SSadaf Ebrahimi      </action>
1402*0c4d7b72SSadaf Ebrahimi      <action issue="IO-635" dev="ggregory" type="add" due-to="Gary Gregory">
1403*0c4d7b72SSadaf Ebrahimi        Add org.apache.commons.io.IOUtils.close(Closeable).
1404*0c4d7b72SSadaf Ebrahimi      </action>
1405*0c4d7b72SSadaf Ebrahimi      <action issue="IO-636" dev="ggregory" type="add" due-to="Gary Gregory">
1406*0c4d7b72SSadaf Ebrahimi        Add and reuse org.apache.commons.io.IOUtils.closeQuitely(Closeable, Consumer&lt;IOException&gt;).
1407*0c4d7b72SSadaf Ebrahimi        Add and reuse org.apache.commons.io.IOUtils.close(Closeable, IOConsumer&lt;IOException&gt;).
1408*0c4d7b72SSadaf Ebrahimi      </action>
1409*0c4d7b72SSadaf Ebrahimi      <action issue="IO-640" dev="ggregory" type="fix" due-to="Gary Gregory">
1410*0c4d7b72SSadaf Ebrahimi        NPE in org.apache.commons.io.IOUtils.contentEquals(InputStream, InputStream) when only one input is null.
1411*0c4d7b72SSadaf Ebrahimi      </action>
1412*0c4d7b72SSadaf Ebrahimi      <action issue="IO-641" dev="ggregory" type="fix" due-to="Gary Gregory">
1413*0c4d7b72SSadaf Ebrahimi        NPE in org.apache.commons.io.IOUtils.contentEquals(Reader, Reader) when only one input is null.
1414*0c4d7b72SSadaf Ebrahimi      </action>
1415*0c4d7b72SSadaf Ebrahimi      <action issue="IO-643" dev="ggregory" type="fix" due-to="Gary Gregory">
1416*0c4d7b72SSadaf Ebrahimi        NPE in org.apache.commons.io.IOUtils.contentEqualsIgnoreEOL(Reader, Reader) when only one input is null.
1417*0c4d7b72SSadaf Ebrahimi      </action>
1418*0c4d7b72SSadaf Ebrahimi      <action issue="IO-644" dev="ggregory" type="fix" due-to="Gary Gregory">
1419*0c4d7b72SSadaf Ebrahimi        NPE in org.apache.commons.io.FileUtils.contentEqualsIgnoreEOL(File, File) when only one input is null.
1420*0c4d7b72SSadaf Ebrahimi      </action>
1421*0c4d7b72SSadaf Ebrahimi      <action issue="IO-645" dev="ggregory" type="add" due-to="Gary Gregory">
1422*0c4d7b72SSadaf Ebrahimi        Add org.apache.commons.io.file.PathUtils.fileContentEquals(Path, Path, OpenOption...).
1423*0c4d7b72SSadaf Ebrahimi      </action>
1424*0c4d7b72SSadaf Ebrahimi      <action issue="IO-458" dev="ggregory" type="add" due-to="Gary Gregory, Joshua Gitlin">
1425*0c4d7b72SSadaf Ebrahimi        Add a SequenceReader similar to java.io.SequenceInputStream.
1426*0c4d7b72SSadaf Ebrahimi      </action>
1427*0c4d7b72SSadaf Ebrahimi      <action issue="IO-648" dev="ggregory" type="add" due-to="Gary Gregory">
1428*0c4d7b72SSadaf Ebrahimi        Implement directory content equality. 100#.
1429*0c4d7b72SSadaf Ebrahimi      </action>
1430*0c4d7b72SSadaf Ebrahimi      <action type="update" dev="ggregory" due-to="Gary Gregory">
1431*0c4d7b72SSadaf Ebrahimi         Update tests from Apache Commons Lang 3.9 to 3.10.
1432*0c4d7b72SSadaf Ebrahimi      </action>
1433*0c4d7b72SSadaf Ebrahimi      <action type="update" dev="ggregory" due-to="Gary Gregory">
1434*0c4d7b72SSadaf Ebrahimi         Update tests org.junit-pioneer:junit-pioneer 0.3.0 -> 0.6.0.
1435*0c4d7b72SSadaf Ebrahimi      </action>
1436*0c4d7b72SSadaf Ebrahimi      <action type="update" dev="ggregory" due-to="Gary Gregory">
1437*0c4d7b72SSadaf Ebrahimi         Update tests org.junit.jupiter:junit-jupiter 5.5.2 -> 5.6.2.
1438*0c4d7b72SSadaf Ebrahimi      </action>
1439*0c4d7b72SSadaf Ebrahimi      <action type="update" dev="ggregory" due-to="Gary Gregory">
1440*0c4d7b72SSadaf Ebrahimi         Update tests org.mockito:mockito-core 3.0.0 -> 3.3.3.
1441*0c4d7b72SSadaf Ebrahimi      </action>
1442*0c4d7b72SSadaf Ebrahimi      <action issue="IO-648" dev="ggregory" type="add" due-to="Adam Retter, Alex Herbert, Gary Gregory">
1443*0c4d7b72SSadaf Ebrahimi         Refactor ByteArrayOutputStream into synchronized and unsynchronized versions #108.
1444*0c4d7b72SSadaf Ebrahimi      </action>
1445*0c4d7b72SSadaf Ebrahimi      <action issue="IO-662" dev="ggregory" type="add" due-to="Adam Retter, Gary Gregory">
1446*0c4d7b72SSadaf Ebrahimi         Refactor ByteArrayOutputStream into synchronized and unsynchronized versions #108.
1447*0c4d7b72SSadaf Ebrahimi      </action>
1448*0c4d7b72SSadaf Ebrahimi      <action issue="IO-664" dev="ggregory" type="fix" due-to="Gary Gregory">
1449*0c4d7b72SSadaf Ebrahimi         org.apache.commons.io.FileUtils.copyURLToFile(*) open but do not close streams.
1450*0c4d7b72SSadaf Ebrahimi      </action>
1451*0c4d7b72SSadaf Ebrahimi      <action issue="IO-666" dev="ggregory" type="update" due-to="Gary Gregory">
1452*0c4d7b72SSadaf Ebrahimi         Normalize internal buffers to 8192 bytes.
1453*0c4d7b72SSadaf Ebrahimi      </action>
1454*0c4d7b72SSadaf Ebrahimi      <action issue="IO-665" dev="ggregory" type="update" due-to="Otto Fowler, Gary Gregory">
1455*0c4d7b72SSadaf Ebrahimi         Ensure that passing a null InputStream results in NPE with tests #112.
1456*0c4d7b72SSadaf Ebrahimi      </action>
1457*0c4d7b72SSadaf Ebrahimi      <action type="update" dev="ggregory" due-to="Gary Gregory">
1458*0c4d7b72SSadaf Ebrahimi         commons.jacoco.version 0.8.4 -> 0.8.5.
1459*0c4d7b72SSadaf Ebrahimi      </action>
1460*0c4d7b72SSadaf Ebrahimi      <action type="update" dev="ggregory" due-to="Gary Gregory">
1461*0c4d7b72SSadaf Ebrahimi         com.github.siom79.japicmp:japicmp-maven-plugin 0.14.1 -> 0.14.3.
1462*0c4d7b72SSadaf Ebrahimi      </action>
1463*0c4d7b72SSadaf Ebrahimi      <action issue="IO-667" dev="ggregory" type="update" due-to="Adam Retter, Gary Gregory">
1464*0c4d7b72SSadaf Ebrahimi         Add functional interfaces IOFunction and IOSupplier #110.
1465*0c4d7b72SSadaf Ebrahimi      </action>
1466*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="Rob Spoor, Gary Gregory">
1467*0c4d7b72SSadaf Ebrahimi         Support sub sequences in CharSequenceReader #91.
1468*0c4d7b72SSadaf Ebrahimi      </action>
1469*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="update" due-to="dengliming">
1470*0c4d7b72SSadaf Ebrahimi         Remove deprecated sudo setting. #113.
1471*0c4d7b72SSadaf Ebrahimi      </action>
1472*0c4d7b72SSadaf Ebrahimi    </release>
1473*0c4d7b72SSadaf Ebrahimi
1474*0c4d7b72SSadaf Ebrahimi    <release version="2.6" date="2017-10-15" description="Java 7 required, Java 9 supported.">
1475*0c4d7b72SSadaf Ebrahimi      <action issue="IO-553" dev="britter" type="update" due-to="Michael Ernst">
1476*0c4d7b72SSadaf Ebrahimi        Make code style of hasBOM() consistent with getBOMCharsetName()
1477*0c4d7b72SSadaf Ebrahimi      </action>
1478*0c4d7b72SSadaf Ebrahimi       <action issue="IO-546" dev="pschumacher" type="fix" due-to="Tomas Celaya">
1479*0c4d7b72SSadaf Ebrahimi        ClosedOutputStream#flush should throw
1480*0c4d7b72SSadaf Ebrahimi      </action>
1481*0c4d7b72SSadaf Ebrahimi      <action issue="IO-551" dev="britter" type="add">
1482*0c4d7b72SSadaf Ebrahimi        Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility
1483*0c4d7b72SSadaf Ebrahimi      </action>
1484*0c4d7b72SSadaf Ebrahimi      <action issue="IO-550" dev="kinow" type="fix" due-to="Jimi Adrian">
1485*0c4d7b72SSadaf Ebrahimi        Documentation issue, fix 404 Javadoc issues in the description page
1486*0c4d7b72SSadaf Ebrahimi      </action>
1487*0c4d7b72SSadaf Ebrahimi      <action issue="IO-542" dev="pschumacher" type="update" due-to="Ilmars Poikans">
1488*0c4d7b72SSadaf Ebrahimi        FileUtils#readFileToByteArray: optimize reading of files with known size
1489*0c4d7b72SSadaf Ebrahimi      </action>
1490*0c4d7b72SSadaf Ebrahimi      <action issue="IO-547" dev="ggregory" type="update" due-to="Nikhil Shinde, Michael Ernst, Gary Greory">
1491*0c4d7b72SSadaf Ebrahimi        Throw a IllegalArgumentException instead of NullPointerException in FileSystemUtils.freeSpaceWindows().
1492*0c4d7b72SSadaf Ebrahimi      </action>
1493*0c4d7b72SSadaf Ebrahimi      <action issue="IO-367" dev="pschumacher" type="add" due-to="James Sawle">
1494*0c4d7b72SSadaf Ebrahimi        Add convenience methods for copyToDirectory
1495*0c4d7b72SSadaf Ebrahimi      </action>
1496*0c4d7b72SSadaf Ebrahimi      <action issue="IO-442" dev="pschumacher" type="fix" due-to="Simon Robinson">
1497*0c4d7b72SSadaf Ebrahimi        Javadoc contradictory for FileFilterUtils.ageFileFilter(cutoff) and the filter it constructs: AgeFileFilter(cutoff)
1498*0c4d7b72SSadaf Ebrahimi      </action>
1499*0c4d7b72SSadaf Ebrahimi      <action issue="IO-534" dev="sebb" type="fix">
1500*0c4d7b72SSadaf Ebrahimi        FileUtilTestCase.testForceDeleteDir() should not delete testDirectory parent
1501*0c4d7b72SSadaf Ebrahimi      </action>
1502*0c4d7b72SSadaf Ebrahimi      <action issue="IO-528" dev="pschumacher" type="fix" due-to="Dave Moten">
1503*0c4d7b72SSadaf Ebrahimi        fix Tailer.run race condition runaway logging
1504*0c4d7b72SSadaf Ebrahimi      </action>
1505*0c4d7b72SSadaf Ebrahimi      <action issue="IO-483" dev="kinow" type="fix" due-to="Marko Vasic">
1506*0c4d7b72SSadaf Ebrahimi        getPrefixLength return -1 if Unix file contains colon
1507*0c4d7b72SSadaf Ebrahimi      </action>
1508*0c4d7b72SSadaf Ebrahimi      <action issue="IO-520" dev="pschumacher" type="fix">
1509*0c4d7b72SSadaf Ebrahimi        FileUtilsTestCase#testContentEqualsIgnoreEOL fails on Windows
1510*0c4d7b72SSadaf Ebrahimi      </action>
1511*0c4d7b72SSadaf Ebrahimi      <action issue="IO-516" dev="pschumacher" type="fix" due-to="Jason Pyeron">
1512*0c4d7b72SSadaf Ebrahimi        .gitattributes not correctly applied
1513*0c4d7b72SSadaf Ebrahimi      </action>
1514*0c4d7b72SSadaf Ebrahimi      <action issue="IO-515" dev="ggregory" type="fix" due-to="Brett Lounsbury, Gary Gregory">
1515*0c4d7b72SSadaf Ebrahimi        Allow Specifying Initial Buffer Size of DeferredFileOutputStream.
1516*0c4d7b72SSadaf Ebrahimi      </action>
1517*0c4d7b72SSadaf Ebrahimi      <action issue="IO-512" dev="ggregory" type="fix" due-to="Ralf Hauser">
1518*0c4d7b72SSadaf Ebrahimi        ThresholdingOutputStream.thresholdReached() results in FileNotFoundException.
1519*0c4d7b72SSadaf Ebrahimi      </action>
1520*0c4d7b72SSadaf Ebrahimi      <action issue="IO-511" dev="britter" type="fix" due-to="Ahmet Celik">
1521*0c4d7b72SSadaf Ebrahimi        After a few unit tests, a few newly created directories not cleaned completely.
1522*0c4d7b72SSadaf Ebrahimi      </action>
1523*0c4d7b72SSadaf Ebrahimi      <action issue="IO-502" dev="ggregory" type="fix" due-to="Christian Schulte">
1524*0c4d7b72SSadaf Ebrahimi        Exceptions are suppressed incorrectly when copying files.
1525*0c4d7b72SSadaf Ebrahimi      </action>
1526*0c4d7b72SSadaf Ebrahimi      <action issue="IO-503" dev="ggregory" type="fix">
1527*0c4d7b72SSadaf Ebrahimi        Update platform requirement to Java 7.
1528*0c4d7b72SSadaf Ebrahimi      </action>
1529*0c4d7b72SSadaf Ebrahimi      <action issue="IO-537" dev="ggregory" type="fix" due-to="Borys Zibrov">
1530*0c4d7b72SSadaf Ebrahimi        BOMInputStream shouldn't sort array of BOMs in-place.
1531*0c4d7b72SSadaf Ebrahimi      </action>
1532*0c4d7b72SSadaf Ebrahimi      <action issue="IO-506" dev="ggregory" type="update" due-to="Christian Schulte">
1533*0c4d7b72SSadaf Ebrahimi        Deprecate methods FileSystemUtils.freeSpaceKb().
1534*0c4d7b72SSadaf Ebrahimi      </action>
1535*0c4d7b72SSadaf Ebrahimi      <action issue="IO-505" dev="ggregory" type="update" due-to="Christian Schulte">
1536*0c4d7b72SSadaf Ebrahimi        Make LineIterator implement Closeable to support try-with-resources statements.
1537*0c4d7b72SSadaf Ebrahimi      </action>
1538*0c4d7b72SSadaf Ebrahimi      <action issue="IO-504" dev="ggregory" type="update" due-to="Christian Schulte">
1539*0c4d7b72SSadaf Ebrahimi        Deprecated of all IOUtils.closeQuietly() methods and use try-with-resources internally.
1540*0c4d7b72SSadaf Ebrahimi      </action>
1541*0c4d7b72SSadaf Ebrahimi      <action issue="IO-493" dev="pschumacher" type="add" due-to="Piotr Turski">
1542*0c4d7b72SSadaf Ebrahimi        Add infinite circular input stream
1543*0c4d7b72SSadaf Ebrahimi      </action>
1544*0c4d7b72SSadaf Ebrahimi      <action issue="IO-507" dev="ggregory" type="add">
1545*0c4d7b72SSadaf Ebrahimi        Add a ByteOrderParser class.
1546*0c4d7b72SSadaf Ebrahimi      </action>
1547*0c4d7b72SSadaf Ebrahimi      <action issue="IO-518" dev="jochen" type="add">
1548*0c4d7b72SSadaf Ebrahimi        Add ObservableInputStream
1549*0c4d7b72SSadaf Ebrahimi      </action>
1550*0c4d7b72SSadaf Ebrahimi      <action issue="IO-519" dev="jochen" type="add">
1551*0c4d7b72SSadaf Ebrahimi        Add MessageDigestCalculatingInputStream
1552*0c4d7b72SSadaf Ebrahimi      </action>
1553*0c4d7b72SSadaf Ebrahimi      <action issue="IO-513" dev="ggregory" type="add" due-to="Behrang Saeedzadeh">
1554*0c4d7b72SSadaf Ebrahimi        Add convenience methods for reading class path resources.
1555*0c4d7b72SSadaf Ebrahimi      </action>
1556*0c4d7b72SSadaf Ebrahimi      <action issue="IO-514" dev="pschumacher" type="remove">
1557*0c4d7b72SSadaf Ebrahimi        Remove org.apache.commons.io.Java7Support
1558*0c4d7b72SSadaf Ebrahimi      </action>
1559*0c4d7b72SSadaf Ebrahimi      <action issue="IO-567" dev="jochen" type="fix">
1560*0c4d7b72SSadaf Ebrahimi        Implement special case handling for NTFS ADS names: FilenameUtils.getExtension(String),
1561*0c4d7b72SSadaf Ebrahimi        and FilenameUtils.indexOfExtension(String) are now throwing an IllegalArgumentException,
1562*0c4d7b72SSadaf Ebrahimi        if the file name in question appears to identify an alternate data stream (Windows only).
1563*0c4d7b72SSadaf Ebrahimi      </action>
1564*0c4d7b72SSadaf Ebrahimi    </release>
1565*0c4d7b72SSadaf Ebrahimi
1566*0c4d7b72SSadaf Ebrahimi    <release version="2.5" date="2016-04-22" description="New features and bug fixes.">
1567*0c4d7b72SSadaf Ebrahimi      <action issue="IO-492" dev="ggregory" type="fix" due-to="Santiago Castro">
1568*0c4d7b72SSadaf Ebrahimi        Typo: In an IOUtils.java comment it says "focussed" instead of "focused".
1569*0c4d7b72SSadaf Ebrahimi      </action>
1570*0c4d7b72SSadaf Ebrahimi      <action issue="IO-433" dev="krosenvold" type="update">
1571*0c4d7b72SSadaf Ebrahimi        Converted all test cases to JUnit 4
1572*0c4d7b72SSadaf Ebrahimi      </action>
1573*0c4d7b72SSadaf Ebrahimi      <action issue="IO-487" dev="bdelacretaz" type="add">
1574*0c4d7b72SSadaf Ebrahimi        Add ValidatingObjectInputStream for controlled deserialization
1575*0c4d7b72SSadaf Ebrahimi      </action>
1576*0c4d7b72SSadaf Ebrahimi      <action issue="IO-446" dev="krosenvold" type="fix" due-to="Jeffrey Barrus">
1577*0c4d7b72SSadaf Ebrahimi        adds an endOfFileReached method to the TailerListener
1578*0c4d7b72SSadaf Ebrahimi      </action>
1579*0c4d7b72SSadaf Ebrahimi      <action issue="IO-484" dev="krosenvold" type="fix" due-to="Philippe Arteau">
1580*0c4d7b72SSadaf Ebrahimi        FilenameUtils should handle embedded null bytes
1581*0c4d7b72SSadaf Ebrahimi      </action>
1582*0c4d7b72SSadaf Ebrahimi      <action issue="IO-481" dev="krosenvold" type="fix">
1583*0c4d7b72SSadaf Ebrahimi        Changed/Corrected algorithm for waitFor
1584*0c4d7b72SSadaf Ebrahimi      </action>
1585*0c4d7b72SSadaf Ebrahimi      <action issue="IO-471" dev="krosenvold" type="add" due-to="Leandro Reis">
1586*0c4d7b72SSadaf Ebrahimi        Support for additional encodings in ReversedLinesFileReader
1587*0c4d7b72SSadaf Ebrahimi      </action>
1588*0c4d7b72SSadaf Ebrahimi      <action issue="IO-428" dev="krosenvold" type="fix" due-to="Stefan Gmeiner">
1589*0c4d7b72SSadaf Ebrahimi        BOMInputStream.skip returns wrong count if stream contains no BOM
1590*0c4d7b72SSadaf Ebrahimi      </action>
1591*0c4d7b72SSadaf Ebrahimi      <action issue="IO-425" dev="krosenvold" type="add" due-to="Craig Swank">
1592*0c4d7b72SSadaf Ebrahimi        Setter method for threshold on ThresholdingOutputStream
1593*0c4d7b72SSadaf Ebrahimi      </action>
1594*0c4d7b72SSadaf Ebrahimi      <action issue="IO-488" dev="krosenvold" type="fix" due-to="Björn Buchner">
1595*0c4d7b72SSadaf Ebrahimi        FileUtils.waitFor(...) swallows thread interrupted status
1596*0c4d7b72SSadaf Ebrahimi      </action>
1597*0c4d7b72SSadaf Ebrahimi      <action issue="IO-452" dev="krosenvold" type="fix" due-to="David Standish">
1598*0c4d7b72SSadaf Ebrahimi        Support for symlinks with missing target. Added support for JDK7 symlink features when present
1599*0c4d7b72SSadaf Ebrahimi      </action>
1600*0c4d7b72SSadaf Ebrahimi      <action issue="IO-466" dev="krosenvold" type="update">
1601*0c4d7b72SSadaf Ebrahimi        Added testcase to show this was fixed with IO-423
1602*0c4d7b72SSadaf Ebrahimi      </action>
1603*0c4d7b72SSadaf Ebrahimi      <action issue="IO-479" dev="sebb" type="update" due-to="Zhouce Chen">
1604*0c4d7b72SSadaf Ebrahimi        Correct exception message in FileUtils.getFile(File, String...)
1605*0c4d7b72SSadaf Ebrahimi      </action>
1606*0c4d7b72SSadaf Ebrahimi      <action issue="IO-406" dev="britter" type="add" due-to="Niall Pemberton">
1607*0c4d7b72SSadaf Ebrahimi        Introduce new class AppendableOutputStream
1608*0c4d7b72SSadaf Ebrahimi      </action>
1609*0c4d7b72SSadaf Ebrahimi      <action issue="IO-465" dev="britter" type="update" due-to="based2">
1610*0c4d7b72SSadaf Ebrahimi         Update to JUnit 4.12
1611*0c4d7b72SSadaf Ebrahimi      </action>
1612*0c4d7b72SSadaf Ebrahimi      <action issue="IO-462" dev="sebb" type="update">
1613*0c4d7b72SSadaf Ebrahimi         IOExceptionWithCause no longer needed
1614*0c4d7b72SSadaf Ebrahimi      </action>
1615*0c4d7b72SSadaf Ebrahimi      <action issue="IO-459" dev="olamy" type="add" due-to="Kristian Rosenvold">
1616*0c4d7b72SSadaf Ebrahimi        Add WindowsLineEndingInputStream and UnixLineEndingInputStream.
1617*0c4d7b72SSadaf Ebrahimi      </action>
1618*0c4d7b72SSadaf Ebrahimi      <action issue="IO-457" dev="olamy" type="add" due-to="Kristian Rosenvold">
1619*0c4d7b72SSadaf Ebrahimi        Add a BoundedReader, a wrapper that can be used to constrain access
1620*0c4d7b72SSadaf Ebrahimi        to an underlying stream when used with mark/reset -
1621*0c4d7b72SSadaf Ebrahimi        to avoid overflowing the mark limit of the underlying buffer.
1622*0c4d7b72SSadaf Ebrahimi      </action>
1623*0c4d7b72SSadaf Ebrahimi      <action issue="IO-453" dev="sebb" type="fix" due-to="Steven Christou">
1624*0c4d7b72SSadaf Ebrahimi         Regression in FileUtils.readFileToString from 2.0.1
1625*0c4d7b72SSadaf Ebrahimi      </action>
1626*0c4d7b72SSadaf Ebrahimi      <action issue="IO-451" dev="sebb" type="fix" due-to="David Standish">
1627*0c4d7b72SSadaf Ebrahimi         ant test fails - resources missing from test classpath
1628*0c4d7b72SSadaf Ebrahimi      </action>
1629*0c4d7b72SSadaf Ebrahimi      <action issue="IO-435" dev="tn" type="fix" due-to="Dominik Stadler">
1630*0c4d7b72SSadaf Ebrahimi         Document that FileUtils.deleteDirectory, directoryContains and cleanDirectory
1631*0c4d7b72SSadaf Ebrahimi         may throw an IllegalArgumentException in case the passed directory does not
1632*0c4d7b72SSadaf Ebrahimi         exist or is not a directory.
1633*0c4d7b72SSadaf Ebrahimi      </action>
1634*0c4d7b72SSadaf Ebrahimi      <action issue="IO-426" dev="ggregory" type="add">
1635*0c4d7b72SSadaf Ebrahimi         Add API IOUtils.closeQuietly(Closeable...)
1636*0c4d7b72SSadaf Ebrahimi      </action>
1637*0c4d7b72SSadaf Ebrahimi      <action issue="IO-424" dev="ggregory" type="fix" due-to="Ville Skyttä">
1638*0c4d7b72SSadaf Ebrahimi         Javadoc fixes, mostly to appease 1.8.0
1639*0c4d7b72SSadaf Ebrahimi      </action>
1640*0c4d7b72SSadaf Ebrahimi      <action issue="IO-422" dev="ggregory" type="update">
1641*0c4d7b72SSadaf Ebrahimi         Deprecate Charsets Charset constants in favor of Java 7's java.nio.charset.StandardCharsets
1642*0c4d7b72SSadaf Ebrahimi      </action>
1643*0c4d7b72SSadaf Ebrahimi      <action issue="IO-410" dev="sebb" type="add" due-to="Beluga Behr">
1644*0c4d7b72SSadaf Ebrahimi         Readfully() That Returns A Byte Array
1645*0c4d7b72SSadaf Ebrahimi      </action>
1646*0c4d7b72SSadaf Ebrahimi      <action issue="IO-395" dev="brentworden" type="add" due-to="Beluga Behr">
1647*0c4d7b72SSadaf Ebrahimi         Overload IOUtils buffer methods to accept buffer size
1648*0c4d7b72SSadaf Ebrahimi      </action>
1649*0c4d7b72SSadaf Ebrahimi      <action issue="IO-389" dev="sebb" type="fix" due-to="Austin Doupnik">
1650*0c4d7b72SSadaf Ebrahimi         FileUtils.sizeOfDirectory can throw IllegalArgumentException
1651*0c4d7b72SSadaf Ebrahimi      </action>
1652*0c4d7b72SSadaf Ebrahimi      <action issue="IO-390" dev="sebb" type="fix">
1653*0c4d7b72SSadaf Ebrahimi         FileUtils.sizeOfDirectoryAsBigInteger can overflow.
1654*0c4d7b72SSadaf Ebrahimi         Ensure that recursive calls all use BigInteger
1655*0c4d7b72SSadaf Ebrahimi      </action>
1656*0c4d7b72SSadaf Ebrahimi      <action issue="IO-382" dev="sebb" type="add">
1657*0c4d7b72SSadaf Ebrahimi         Chunked IO for large arrays.
1658*0c4d7b72SSadaf Ebrahimi         Added writeChunked(byte[], OutputStream) and writeChunked(char[] Writer)
1659*0c4d7b72SSadaf Ebrahimi         Added ChunkedOutputStream, ChunkedWriter
1660*0c4d7b72SSadaf Ebrahimi      </action>
1661*0c4d7b72SSadaf Ebrahimi      <action issue="IO-385" dev="sebb" type="fix">
1662*0c4d7b72SSadaf Ebrahimi         FileUtils.doCopyFile can potentially loop forever
1663*0c4d7b72SSadaf Ebrahimi         Exit loop if no data to copy
1664*0c4d7b72SSadaf Ebrahimi      </action>
1665*0c4d7b72SSadaf Ebrahimi      <action issue="IO-383" dev="sebb" type="fix">
1666*0c4d7b72SSadaf Ebrahimi         FileUtils.doCopyFile caches the file size; needs to be documented
1667*0c4d7b72SSadaf Ebrahimi         Added Javadoc; show file lengths in exception message
1668*0c4d7b72SSadaf Ebrahimi      </action>
1669*0c4d7b72SSadaf Ebrahimi      <action issue="IO-239" dev="sebb" type="update">
1670*0c4d7b72SSadaf Ebrahimi         Convert IOCase to a Java 1.5+ Enumeration
1671*0c4d7b72SSadaf Ebrahimi         [N.B. this is binary compatible]
1672*0c4d7b72SSadaf Ebrahimi      </action>
1673*0c4d7b72SSadaf Ebrahimi      <action issue="IO-233" dev="sebb" type="add">
1674*0c4d7b72SSadaf Ebrahimi         Add Methods for Buffering Streams/Writers To IOUtils
1675*0c4d7b72SSadaf Ebrahimi         Added overloaded buffer() methods - see also IO-330
1676*0c4d7b72SSadaf Ebrahimi      </action>
1677*0c4d7b72SSadaf Ebrahimi      <action issue="IO-330" dev="sebb" type="add">
1678*0c4d7b72SSadaf Ebrahimi         IOUtils#toBufferedOutputStream/toBufferedWriter to conditionally wrap the output
1679*0c4d7b72SSadaf Ebrahimi         Added overloaded buffer() methods - see also IO-233
1680*0c4d7b72SSadaf Ebrahimi      </action>
1681*0c4d7b72SSadaf Ebrahimi      <action issue="IO-381" dev="ggregory" type="add">
1682*0c4d7b72SSadaf Ebrahimi        Add FileUtils.copyInputStreamToFile API with option to leave the source open.
1683*0c4d7b72SSadaf Ebrahimi        See copyInputStreamToFile(final InputStream source, final File destination, boolean closeSource)
1684*0c4d7b72SSadaf Ebrahimi      </action>
1685*0c4d7b72SSadaf Ebrahimi      <action issue="IO-380" dev="sebb" type="fix" due-to="claudio_ch">
1686*0c4d7b72SSadaf Ebrahimi        FileUtils.copyInputStreamToFile should document it closes the input source
1687*0c4d7b72SSadaf Ebrahimi      </action>
1688*0c4d7b72SSadaf Ebrahimi      <action issue="IO-279" dev="sebb" type="fix">
1689*0c4d7b72SSadaf Ebrahimi        Tailer erroneously considers file as new.
1690*0c4d7b72SSadaf Ebrahimi        Fix to use file.lastModified() rather than System.currentTimeMillis()
1691*0c4d7b72SSadaf Ebrahimi      </action>
1692*0c4d7b72SSadaf Ebrahimi      <action issue="IO-356" dev="sebb" type="fix">
1693*0c4d7b72SSadaf Ebrahimi         CharSequenceInputStream#reset() behaves incorrectly in case when buffer size is not dividable by data size.
1694*0c4d7b72SSadaf Ebrahimi         Fix code so skip relates to the encoded bytes; reset now re-encodes the data up to the point of the mark
1695*0c4d7b72SSadaf Ebrahimi      </action>
1696*0c4d7b72SSadaf Ebrahimi      <action issue="IO-379" dev="sebb" type="add">
1697*0c4d7b72SSadaf Ebrahimi         CharSequenceInputStream - add tests for available()
1698*0c4d7b72SSadaf Ebrahimi         Fix code so it really does reflect a minimum available.
1699*0c4d7b72SSadaf Ebrahimi      </action>
1700*0c4d7b72SSadaf Ebrahimi      <action issue="IO-328" dev="sebb" type="update">
1701*0c4d7b72SSadaf Ebrahimi        getPrefixLength returns null if filename has leading slashes
1702*0c4d7b72SSadaf Ebrahimi        Javadoc: add examples to show correct behavior; add unit tests
1703*0c4d7b72SSadaf Ebrahimi      </action>
1704*0c4d7b72SSadaf Ebrahimi      <action issue="IO-299" dev="sebb" type="update">
1705*0c4d7b72SSadaf Ebrahimi        FileUtils.listFilesAndDirs includes original dir in results even when it doesn't match filter
1706*0c4d7b72SSadaf Ebrahimi        Javadoc: clarify that original dir is included in the results
1707*0c4d7b72SSadaf Ebrahimi      </action>
1708*0c4d7b72SSadaf Ebrahimi      <action issue="IO-346" dev="sebb" type="add">
1709*0c4d7b72SSadaf Ebrahimi         Add ByteArrayOutputStream.toInputStream()
1710*0c4d7b72SSadaf Ebrahimi      </action>
1711*0c4d7b72SSadaf Ebrahimi      <action issue="IO-368" dev="sebb" type="fix">
1712*0c4d7b72SSadaf Ebrahimi        ClassLoaderObjectInputStream does not handle primitive typed members
1713*0c4d7b72SSadaf Ebrahimi      </action>
1714*0c4d7b72SSadaf Ebrahimi      <action issue="IO-341" dev="sebb" type="add">
1715*0c4d7b72SSadaf Ebrahimi         A constant for holding the BOM character (U+FEFF)
1716*0c4d7b72SSadaf Ebrahimi      </action>
1717*0c4d7b72SSadaf Ebrahimi      <action issue="IO-314" dev="sebb" type="fix">
1718*0c4d7b72SSadaf Ebrahimi        Deprecate all methods that use the default encoding
1719*0c4d7b72SSadaf Ebrahimi      </action>
1720*0c4d7b72SSadaf Ebrahimi      <action issue="IO-338" dev="sebb" type="fix">
1721*0c4d7b72SSadaf Ebrahimi        When a file is rotated, finish reading previous file prior to starting new one
1722*0c4d7b72SSadaf Ebrahimi      </action>
1723*0c4d7b72SSadaf Ebrahimi      <action issue="IO-354" dev="sebb" type="fix">
1724*0c4d7b72SSadaf Ebrahimi        Commons IO Tailer does not respect UTF-8 Charset.
1725*0c4d7b72SSadaf Ebrahimi      </action>
1726*0c4d7b72SSadaf Ebrahimi      <action issue="IO-323" dev="sebb" type="fix">
1727*0c4d7b72SSadaf Ebrahimi        What should happen in FileUtils.sizeOf[Directory] when an overflow takes place?
1728*0c4d7b72SSadaf Ebrahimi        Added Javadoc.
1729*0c4d7b72SSadaf Ebrahimi      </action>
1730*0c4d7b72SSadaf Ebrahimi      <action issue="IO-372" dev="sebb" type="fix">
1731*0c4d7b72SSadaf Ebrahimi        FileUtils.moveDirectory can produce misleading error message on failure
1732*0c4d7b72SSadaf Ebrahimi      </action>
1733*0c4d7b72SSadaf Ebrahimi      <action issue="IO-375" dev="sebb" type="update">
1734*0c4d7b72SSadaf Ebrahimi        FilenameUtils.splitOnTokens(String text) check for '**' could be simplified
1735*0c4d7b72SSadaf Ebrahimi      </action>
1736*0c4d7b72SSadaf Ebrahimi      <action issue="IO-374" dev="sebb" type="update">
1737*0c4d7b72SSadaf Ebrahimi        WildcardFileFilter ctors should not use null to mean IOCase.SENSITIVE when delegating to other ctors
1738*0c4d7b72SSadaf Ebrahimi      </action>
1739*0c4d7b72SSadaf Ebrahimi      <action issue="IO-362" dev="ggregory" type="fix" due-to="mmadson, ggregory">
1740*0c4d7b72SSadaf Ebrahimi        IOUtils.contentEquals* methods returns false if input1 == input2, should return true.
1741*0c4d7b72SSadaf Ebrahimi      </action>
1742*0c4d7b72SSadaf Ebrahimi      <action issue="IO-361" dev="ggregory" type="add">
1743*0c4d7b72SSadaf Ebrahimi        Add API FileUtils.forceMkdirsParent().
1744*0c4d7b72SSadaf Ebrahimi      </action>
1745*0c4d7b72SSadaf Ebrahimi      <action issue="IO-360" dev="ggregory" type="add">
1746*0c4d7b72SSadaf Ebrahimi        Add API Charsets.requiredCharsets().
1747*0c4d7b72SSadaf Ebrahimi      </action>
1748*0c4d7b72SSadaf Ebrahimi      <action issue="IO-359" dev="ggregory" type="add" due-to="yukoba">
1749*0c4d7b72SSadaf Ebrahimi        Add IOUtils.skip and skipFully(ReadableByteChannel, long).
1750*0c4d7b72SSadaf Ebrahimi      </action>
1751*0c4d7b72SSadaf Ebrahimi      <action issue="IO-358" dev="ggregory" type="add" due-to="yukoba">
1752*0c4d7b72SSadaf Ebrahimi        Add IOUtils.read and readFully(ReadableByteChannel, ByteBuffer buffer).
1753*0c4d7b72SSadaf Ebrahimi      </action>
1754*0c4d7b72SSadaf Ebrahimi      <action issue="IO-357" dev="ggregory" type="fix" due-to="mortenh">
1755*0c4d7b72SSadaf Ebrahimi        [Tailer] InterruptedException while the thread is sleeping is silently ignored
1756*0c4d7b72SSadaf Ebrahimi      </action>
1757*0c4d7b72SSadaf Ebrahimi      <action issue="IO-353" dev="ggregory" type="add" due-to="ggregory">
1758*0c4d7b72SSadaf Ebrahimi        Add API IOUtils.copy(InputStream, OutputStream, int)
1759*0c4d7b72SSadaf Ebrahimi      </action>
1760*0c4d7b72SSadaf Ebrahimi      <action issue="IO-349" dev="ggregory" type="add" due-to="scop">
1761*0c4d7b72SSadaf Ebrahimi        Add API with array offset and length argument to FileUtils.writeByteArrayToFile.
1762*0c4d7b72SSadaf Ebrahimi      </action>
1763*0c4d7b72SSadaf Ebrahimi      <action issue="IO-352" dev="ggregory" type="fix" due-to="scop">
1764*0c4d7b72SSadaf Ebrahimi        Spelling fixes.
1765*0c4d7b72SSadaf Ebrahimi      </action>
1766*0c4d7b72SSadaf Ebrahimi      <action issue="IO-348" dev="ggregory" type="add" due-to="plcstpierre">
1767*0c4d7b72SSadaf Ebrahimi        Missing information in IllegalArgumentException thrown by org.apache.commons.io.FileUtils#validateListFilesParameters.
1768*0c4d7b72SSadaf Ebrahimi      </action>
1769*0c4d7b72SSadaf Ebrahimi      <action issue="IO-345" dev="ggregory" type="add" due-to="mkresse">
1770*0c4d7b72SSadaf Ebrahimi        Supply a hook method allowing Tailer actively determining stop condition.
1771*0c4d7b72SSadaf Ebrahimi      </action>
1772*0c4d7b72SSadaf Ebrahimi      <action issue="IO-436" dev="ggregory" type="fix" due-to="christoph.schneegans">
1773*0c4d7b72SSadaf Ebrahimi        Improper Javadoc comment for FilenameUtils.indexOfExtension.
1774*0c4d7b72SSadaf Ebrahimi      </action>
1775*0c4d7b72SSadaf Ebrahimi      <action issue="IO-437" dev="ggregory" type="add">
1776*0c4d7b72SSadaf Ebrahimi        Make IOUtils.EOF public and reuse it in various classes.
1777*0c4d7b72SSadaf Ebrahimi      </action>
1778*0c4d7b72SSadaf Ebrahimi    </release>
1779*0c4d7b72SSadaf Ebrahimi
1780*0c4d7b72SSadaf Ebrahimi    <release version="2.4" date="2012-06-12" description="New features and bug fixes.">
1781*0c4d7b72SSadaf Ebrahimi      <action issue="IO-343" dev="ggregory" type="fix" due-to="igorlash">
1782*0c4d7b72SSadaf Ebrahimi        org.apache.commons.io.comparator Javadoc is inconsistent with real code.
1783*0c4d7b72SSadaf Ebrahimi      </action>
1784*0c4d7b72SSadaf Ebrahimi      <action issue="IO-336" dev="ggregory" type="fix" due-to="rleavelle">
1785*0c4d7b72SSadaf Ebrahimi        Yottabyte (YB) incorrectly defined in FileUtils.
1786*0c4d7b72SSadaf Ebrahimi      </action>
1787*0c4d7b72SSadaf Ebrahimi      <action issue="IO-269" dev="ggregory" type="add" due-to="sebb">
1788*0c4d7b72SSadaf Ebrahimi        Tailer locks file from deletion/rename on Windows.
1789*0c4d7b72SSadaf Ebrahimi      </action>
1790*0c4d7b72SSadaf Ebrahimi      <action issue="IO-279" dev="sebb" type="fix" due-to="Sergio Bossa, Chris Baron">
1791*0c4d7b72SSadaf Ebrahimi        Tailer erroneously considers file as new.
1792*0c4d7b72SSadaf Ebrahimi      </action>
1793*0c4d7b72SSadaf Ebrahimi      <action issue="IO-335" dev="sebb" type="fix">
1794*0c4d7b72SSadaf Ebrahimi        Tailer#readLines - incorrect CR handling.
1795*0c4d7b72SSadaf Ebrahimi      </action>
1796*0c4d7b72SSadaf Ebrahimi      <action issue="IO-334" dev="sebb" type="fix">
1797*0c4d7b72SSadaf Ebrahimi        FileUtils.toURLs throws NPE for null parameter; document the behavior.
1798*0c4d7b72SSadaf Ebrahimi      </action>
1799*0c4d7b72SSadaf Ebrahimi      <action issue="IO-333" dev="ggregory" type="add" due-to="fmeschbe">
1800*0c4d7b72SSadaf Ebrahimi        Export OSGi packages at version 1.x in addition to 2.x.
1801*0c4d7b72SSadaf Ebrahimi      </action>
1802*0c4d7b72SSadaf Ebrahimi      <action issue="IO-320" dev="ggregory" type="add" due-to="ggregory">
1803*0c4d7b72SSadaf Ebrahimi        Add XmlStreamReader support for UTF-32.
1804*0c4d7b72SSadaf Ebrahimi      </action>
1805*0c4d7b72SSadaf Ebrahimi      <action issue="IO-331" dev="ggregory" type="add" due-to="ggregory">
1806*0c4d7b72SSadaf Ebrahimi        BOMInputStream wrongly detects UTF-32LE_BOM files as UTF-16LE_BOM files in method getBOM().
1807*0c4d7b72SSadaf Ebrahimi      </action>
1808*0c4d7b72SSadaf Ebrahimi      <action issue="IO-332" dev="ggregory" type="fix" due-to="liangly">
1809*0c4d7b72SSadaf Ebrahimi        Improve tailer's reading performance.
1810*0c4d7b72SSadaf Ebrahimi      </action>
1811*0c4d7b72SSadaf Ebrahimi      <action issue="IO-279" dev="ggregory" type="fix">
1812*0c4d7b72SSadaf Ebrahimi        Improve Tailer performance with buffered reads (see IO-332).
1813*0c4d7b72SSadaf Ebrahimi      </action>
1814*0c4d7b72SSadaf Ebrahimi      <action issue="IO-329" dev="ggregory" type="fix" due-to="tivv">
1815*0c4d7b72SSadaf Ebrahimi        FileUtils.writeLines uses unbuffered IO.
1816*0c4d7b72SSadaf Ebrahimi      </action>
1817*0c4d7b72SSadaf Ebrahimi      <action issue="IO-327" dev="ggregory" type="add" due-to="ggregory">
1818*0c4d7b72SSadaf Ebrahimi        Add byteCountToDisplaySize(BigInteger).
1819*0c4d7b72SSadaf Ebrahimi      </action>
1820*0c4d7b72SSadaf Ebrahimi      <action issue="IO-326" dev="ggregory" type="add" due-to="ggregory, kinow">
1821*0c4d7b72SSadaf Ebrahimi        Add new FileUtils.sizeOf[Directory] APIs to return BigInteger.
1822*0c4d7b72SSadaf Ebrahimi      </action>
1823*0c4d7b72SSadaf Ebrahimi      <action issue="IO-325" dev="ggregory" type="add" due-to="raviprak">
1824*0c4d7b72SSadaf Ebrahimi        Add IOUtils.toByteArray methods to work with URL and URI.
1825*0c4d7b72SSadaf Ebrahimi      </action>
1826*0c4d7b72SSadaf Ebrahimi      <action issue="IO-324" dev="ggregory" type="add" due-to="raviprak">
1827*0c4d7b72SSadaf Ebrahimi        Add missing Charset sister APIs to method that take a String charset name.
1828*0c4d7b72SSadaf Ebrahimi      </action>
1829*0c4d7b72SSadaf Ebrahimi      <action issue="IO-319" dev="ggregory" type="fix" due-to="raviprak">
1830*0c4d7b72SSadaf Ebrahimi        FileUtils.sizeOfDirectory follows symbolic links.
1831*0c4d7b72SSadaf Ebrahimi      </action>
1832*0c4d7b72SSadaf Ebrahimi    </release>
1833*0c4d7b72SSadaf Ebrahimi
1834*0c4d7b72SSadaf Ebrahimi    <release version="2.3" date="2012-April-10" description="New features and bug fixes.">
1835*0c4d7b72SSadaf Ebrahimi      <action issue="IO-322" dev="ggregory" type="add" due-to="ggregory">
1836*0c4d7b72SSadaf Ebrahimi        Add and use class Charsets.
1837*0c4d7b72SSadaf Ebrahimi      </action>
1838*0c4d7b72SSadaf Ebrahimi      <action issue="IO-321" dev="ggregory" type="add" due-to="ggregory">
1839*0c4d7b72SSadaf Ebrahimi        ByteOrderMark UTF_32LE is incorrect.
1840*0c4d7b72SSadaf Ebrahimi      </action>
1841*0c4d7b72SSadaf Ebrahimi      <action issue="IO-318" dev="ggregory" type="add" due-to="ggregory">
1842*0c4d7b72SSadaf Ebrahimi        Add Charset sister APIs to method that take a String charset name.
1843*0c4d7b72SSadaf Ebrahimi      </action>
1844*0c4d7b72SSadaf Ebrahimi    </release>
1845*0c4d7b72SSadaf Ebrahimi
1846*0c4d7b72SSadaf Ebrahimi    <release version="2.2" date="2012-March-26" description="New features and bug fixes.">
1847*0c4d7b72SSadaf Ebrahimi      <action issue="IO-313" dev="ggregory" type="add" due-to="ggregory">
1848*0c4d7b72SSadaf Ebrahimi        Add IOUtils.toBufferedReader(Reader)
1849*0c4d7b72SSadaf Ebrahimi      </action>
1850*0c4d7b72SSadaf Ebrahimi      <!-- Note: the issue was not raised by Manoj, but arose from IO-305 and tests he performed -->
1851*0c4d7b72SSadaf Ebrahimi      <action issue="IO-308" dev="sebb" type="add" due-to="Manoj Mokashi">
1852*0c4d7b72SSadaf Ebrahimi        Allow applications to provide buffer (or size) for copyLarge methods.
1853*0c4d7b72SSadaf Ebrahimi      </action>
1854*0c4d7b72SSadaf Ebrahimi      <action issue="IO-311" dev="sebb" type="fix" due-to="Robert Muir">
1855*0c4d7b72SSadaf Ebrahimi        IOUtils.read(InputStream/Reader) ignores the offset parameter
1856*0c4d7b72SSadaf Ebrahimi      </action>
1857*0c4d7b72SSadaf Ebrahimi      <action issue="IO-312" dev="sebb" type="fix">
1858*0c4d7b72SSadaf Ebrahimi        CharSequenceInputStream(CharSequence s, Charset charset, int bufferSize) ignores bufferSize
1859*0c4d7b72SSadaf Ebrahimi      </action>
1860*0c4d7b72SSadaf Ebrahimi      <action issue="IO-305" dev="sebb" type="add" due-to="Manoj Mokashi">
1861*0c4d7b72SSadaf Ebrahimi        New copyLarge() method in IOUtils that takes additional offset, length arguments
1862*0c4d7b72SSadaf Ebrahimi      </action>
1863*0c4d7b72SSadaf Ebrahimi      <action issue="IO-300" dev="sebb" type="fix">
1864*0c4d7b72SSadaf Ebrahimi        FileUtils.moveDirectoryToDirectory removes source directory if destination is a sub-directory
1865*0c4d7b72SSadaf Ebrahimi      </action>
1866*0c4d7b72SSadaf Ebrahimi      <action issue="IO-307" dev="sebb" type="fix">
1867*0c4d7b72SSadaf Ebrahimi        ReaderInputStream#read(byte[] b, int off, int len) should check for valid parameters
1868*0c4d7b72SSadaf Ebrahimi      </action>
1869*0c4d7b72SSadaf Ebrahimi      <action issue="IO-287" dev="bayard" type="add" due-to="Ron Kuris, Gary Gregory">
1870*0c4d7b72SSadaf Ebrahimi        Use terabyte (TB), petabyte (PB) and exabyte (EB) in FileUtils.byteCountToDisplaySize(long size)
1871*0c4d7b72SSadaf Ebrahimi      </action>
1872*0c4d7b72SSadaf Ebrahimi      <action issue="IO-306" dev="sebb" type="fix">
1873*0c4d7b72SSadaf Ebrahimi        ReaderInputStream#read(byte[] b, int off, int len) should always return 0 for length == 0
1874*0c4d7b72SSadaf Ebrahimi      </action>
1875*0c4d7b72SSadaf Ebrahimi      <action issue="IO-173" dev="sebb" type="add" due-to="Marcos Vinícius da Silva">
1876*0c4d7b72SSadaf Ebrahimi        FileUtils.listFiles() doesn't return directories
1877*0c4d7b72SSadaf Ebrahimi      </action>
1878*0c4d7b72SSadaf Ebrahimi      <action issue="IO-276" dev="sebb" type="fix" due-to="nkami">
1879*0c4d7b72SSadaf Ebrahimi        "FileUtils#deleteDirectoryOnExit(File)" does not work
1880*0c4d7b72SSadaf Ebrahimi      </action>
1881*0c4d7b72SSadaf Ebrahimi      <action issue="IO-273" dev="sebb" type="fix" due-to="sebb">
1882*0c4d7b72SSadaf Ebrahimi        BoundedInputStream.read() treats max differently from BoundedInputStream.read(byte[]...)
1883*0c4d7b72SSadaf Ebrahimi      </action>
1884*0c4d7b72SSadaf Ebrahimi      <action issue="IO-297" dev="sebb" type="add" due-to="Oleg Kalnichevski">
1885*0c4d7b72SSadaf Ebrahimi        CharSequenceInputStream to efficiently stream content of a CharSequence
1886*0c4d7b72SSadaf Ebrahimi      </action>
1887*0c4d7b72SSadaf Ebrahimi      <action issue="IO-296" dev="sebb" type="update" due-to="Oleg Kalnichevski">
1888*0c4d7b72SSadaf Ebrahimi        ReaderInputStream optimization: more efficient reading of small chunks of data
1889*0c4d7b72SSadaf Ebrahimi      </action>
1890*0c4d7b72SSadaf Ebrahimi      <action issue="IO-298" dev="sebb" type="fix" due-to="Christian Schulte">
1891*0c4d7b72SSadaf Ebrahimi        Various methods of class 'org.apache.commons.io.FileUtils' incorrectly suppress 'java.io.IOException'
1892*0c4d7b72SSadaf Ebrahimi      </action>
1893*0c4d7b72SSadaf Ebrahimi      <action issue="IO-304" dev="ggregory" type="add" due-to="liangly">
1894*0c4d7b72SSadaf Ebrahimi        The second constructor of Tailer class does not pass 'delay' to the third one
1895*0c4d7b72SSadaf Ebrahimi      </action>
1896*0c4d7b72SSadaf Ebrahimi      <action issue="IO-303" dev="ggregory" type="add" due-to="fabian.barney">
1897*0c4d7b72SSadaf Ebrahimi        TeeOutputStream does not call branch.close() when main.close() throws an exception
1898*0c4d7b72SSadaf Ebrahimi      </action>
1899*0c4d7b72SSadaf Ebrahimi      <action issue="IO-302" dev="ggregory" type="add" due-to="jsteuerwald, detinho">
1900*0c4d7b72SSadaf Ebrahimi        ArrayIndexOutOfBoundsException in BOMInputStream when reading a file without BOM multiple times
1901*0c4d7b72SSadaf Ebrahimi      </action>
1902*0c4d7b72SSadaf Ebrahimi      <action issue="IO-301" dev="ggregory" type="add" due-to="kaykay.unique">
1903*0c4d7b72SSadaf Ebrahimi        Add IOUtils.closeQuietly(Selector) necessary
1904*0c4d7b72SSadaf Ebrahimi      </action>
1905*0c4d7b72SSadaf Ebrahimi      <action issue="IO-292" dev="sebb" type="add" due-to="sebb">
1906*0c4d7b72SSadaf Ebrahimi        IOUtils.closeQuietly() should take a ServerSocket as a parameter
1907*0c4d7b72SSadaf Ebrahimi      </action>
1908*0c4d7b72SSadaf Ebrahimi      <action issue="IO-290" dev="sebb" type="add" due-to="sebb">
1909*0c4d7b72SSadaf Ebrahimi        Add read/readFully methods to IOUtils
1910*0c4d7b72SSadaf Ebrahimi      </action>
1911*0c4d7b72SSadaf Ebrahimi      <action issue="IO-288" dev="sebb" type="add" due-to="Georg Henzler">
1912*0c4d7b72SSadaf Ebrahimi        Supply a ReversedLinesFileReader
1913*0c4d7b72SSadaf Ebrahimi      </action>
1914*0c4d7b72SSadaf Ebrahimi      <action issue="IO-291" dev="ggregory" type="add" due-to="ggregory">
1915*0c4d7b72SSadaf Ebrahimi        Add new function FileUtils.directoryContains.
1916*0c4d7b72SSadaf Ebrahimi      </action>
1917*0c4d7b72SSadaf Ebrahimi      <action issue="IO-275" dev="sebb" type="add" due-to="CJ Aspromgos">
1918*0c4d7b72SSadaf Ebrahimi        FileUtils.contentEquals and IOUtils.contentEquals - Add option to ignore "line endings"
1919*0c4d7b72SSadaf Ebrahimi        Added contentEqualsIgnoreEOL methods to both classes
1920*0c4d7b72SSadaf Ebrahimi      </action>
1921*0c4d7b72SSadaf Ebrahimi    </release>
1922*0c4d7b72SSadaf Ebrahimi
1923*0c4d7b72SSadaf Ebrahimi    <release version="2.1" date="2011-Sep-28" description="New features and bug fixes.">
1924*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" issue="IO-285" due-to="ggregory">
1925*0c4d7b72SSadaf Ebrahimi        Use standard Maven directory layout
1926*0c4d7b72SSadaf Ebrahimi      </action>
1927*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" issue="IO-284" due-to="ggregory">
1928*0c4d7b72SSadaf Ebrahimi        Add IOUtils API toString for URL and URI to get contents
1929*0c4d7b72SSadaf Ebrahimi      </action>
1930*0c4d7b72SSadaf Ebrahimi      <action dev="ggregory" type="add" issue="IO-282" due-to="ggregory">
1931*0c4d7b72SSadaf Ebrahimi        Add API FileUtils.copyFile(File input, OutputStream output)
1932*0c4d7b72SSadaf Ebrahimi      </action>
1933*0c4d7b72SSadaf Ebrahimi      <action dev="sebb" type="fix" issue="IO-280" due-to="sebb">
1934*0c4d7b72SSadaf Ebrahimi        Dubious use of mkdirs() return code
1935*0c4d7b72SSadaf Ebrahimi      </action>
1936*0c4d7b72SSadaf Ebrahimi      <action type="fix" issue="IO-277">
1937*0c4d7b72SSadaf Ebrahimi        ReaderInputStream enters infinite loop when it encounters an unmappable character
1938*0c4d7b72SSadaf Ebrahimi      </action>
1939*0c4d7b72SSadaf Ebrahimi      <action type="fix" issue="IO-264">
1940*0c4d7b72SSadaf Ebrahimi        FileUtils.moveFile() Javadoc should specify FileExistsException thrown
1941*0c4d7b72SSadaf Ebrahimi      </action>
1942*0c4d7b72SSadaf Ebrahimi      <action type="add" issue="IO-262">
1943*0c4d7b72SSadaf Ebrahimi        FileAlterationObserver has no getter for FileFilter
1944*0c4d7b72SSadaf Ebrahimi      </action>
1945*0c4d7b72SSadaf Ebrahimi      <action type="add" issue="IO-261">
1946*0c4d7b72SSadaf Ebrahimi        Add FileUtils.getFile API with varargs parameter
1947*0c4d7b72SSadaf Ebrahimi      </action>
1948*0c4d7b72SSadaf Ebrahimi      <action type="fix" issue="IO-260">
1949*0c4d7b72SSadaf Ebrahimi        ClassLoaderObjectInputStream does not handle Proxy classes
1950*0c4d7b72SSadaf Ebrahimi      </action>
1951*0c4d7b72SSadaf Ebrahimi      <action type="update" issue="IO-259">
1952*0c4d7b72SSadaf Ebrahimi        FileAlterationMonitor.stop(boolean allowIntervalToFinish)
1953*0c4d7b72SSadaf Ebrahimi      </action>
1954*0c4d7b72SSadaf Ebrahimi      <action type="add" issue="IO-182">
1955*0c4d7b72SSadaf Ebrahimi        Add new APPEND parameter for writing string into files
1956*0c4d7b72SSadaf Ebrahimi      </action>
1957*0c4d7b72SSadaf Ebrahimi      <action dev="sebb" type="fix" issue="IO-274" due-to="Frank Grimes">
1958*0c4d7b72SSadaf Ebrahimi        Tailer returning partial lines when reaching EOF before EOL
1959*0c4d7b72SSadaf Ebrahimi      </action>
1960*0c4d7b72SSadaf Ebrahimi      <action dev="sebb" type="fix" issue="IO-266" due-to="Igor Smereka">
1961*0c4d7b72SSadaf Ebrahimi        FileUtils.copyFile() throws IOException when copying large files to a shared directory (on Windows)
1962*0c4d7b72SSadaf Ebrahimi      </action>
1963*0c4d7b72SSadaf Ebrahimi      <action dev="sebb" type="fix" issue="IO-263" due-to="Gil Adam">
1964*0c4d7b72SSadaf Ebrahimi        FileSystemUtils.freeSpaceKb throws exception for Windows volumes with no visible files.
1965*0c4d7b72SSadaf Ebrahimi        Improve coverage by also looking for hidden files.
1966*0c4d7b72SSadaf Ebrahimi      </action>
1967*0c4d7b72SSadaf Ebrahimi      <action dev="sebb" type="add" issue="IO-251" due-to="Marco Albini">
1968*0c4d7b72SSadaf Ebrahimi        Add new read method "toByteArray" to handle InputStream with known size.
1969*0c4d7b72SSadaf Ebrahimi      </action>
1970*0c4d7b72SSadaf Ebrahimi    </release>
1971*0c4d7b72SSadaf Ebrahimi
1972*0c4d7b72SSadaf Ebrahimi    <release version="2.0.1" date="2010-Dec-26">
1973*0c4d7b72SSadaf Ebrahimi      <action type="update">
1974*0c4d7b72SSadaf Ebrahimi        TODO: Convert RELEASE-NOTES.txt from 2.0.1?
1975*0c4d7b72SSadaf Ebrahimi      </action>
1976*0c4d7b72SSadaf Ebrahimi    </release>
1977*0c4d7b72SSadaf Ebrahimi
1978*0c4d7b72SSadaf Ebrahimi    <release version="2.0" date="2010-Oct-18">
1979*0c4d7b72SSadaf Ebrahimi      <action type="update">
1980*0c4d7b72SSadaf Ebrahimi        TODO: Convert RELEASE-NOTES.txt from 2.0?
1981*0c4d7b72SSadaf Ebrahimi      </action>
1982*0c4d7b72SSadaf Ebrahimi    </release>
1983*0c4d7b72SSadaf Ebrahimi
1984*0c4d7b72SSadaf Ebrahimi    <release version="1.4" date="2008-Jan-21">
1985*0c4d7b72SSadaf Ebrahimi      <action type="update">
1986*0c4d7b72SSadaf Ebrahimi        TODO: Convert RELEASE-NOTES.txt from 1.4?
1987*0c4d7b72SSadaf Ebrahimi      </action>
1988*0c4d7b72SSadaf Ebrahimi    </release>
1989*0c4d7b72SSadaf Ebrahimi
1990*0c4d7b72SSadaf Ebrahimi    <release version="1.3.2" date="2007-Jul-02" description="Bug fixes.">
1991*0c4d7b72SSadaf Ebrahimi      <action dev="jochen" type="fix" issue="IO-115">
1992*0c4d7b72SSadaf Ebrahimi        Some tests, which are implicitly assuming a Unix-like file
1993*0c4d7b72SSadaf Ebrahimi        system, are now skipped on Windows.
1994*0c4d7b72SSadaf Ebrahimi      </action>
1995*0c4d7b72SSadaf Ebrahimi      <action dev="jochen" type="fix" issue="IO-116">
1996*0c4d7b72SSadaf Ebrahimi        Created the FileCleaningTracker, basically a non-static
1997*0c4d7b72SSadaf Ebrahimi        version of the FileCleaner, which can be controlled by
1998*0c4d7b72SSadaf Ebrahimi        the user.
1999*0c4d7b72SSadaf Ebrahimi      </action>
2000*0c4d7b72SSadaf Ebrahimi      <action dev="bayard" type="fix" issue="IO-117" due-to="Hiroshi Ikeda">
2001*0c4d7b72SSadaf Ebrahimi        EndianUtils - both readSwappedUnsignedInteger(...) methods could
2002*0c4d7b72SSadaf Ebrahimi        return negative numbers due to int/long casting.
2003*0c4d7b72SSadaf Ebrahimi      </action>
2004*0c4d7b72SSadaf Ebrahimi    </release>
2005*0c4d7b72SSadaf Ebrahimi  </body>
2006*0c4d7b72SSadaf Ebrahimi</document>
2007