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