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