Apache Commons logo Commons IO

Apache Commons IO Release Notes

Release History

Version Date Description
2.18.0 2024-11-16 Version 2.18.0: Java 8 is required.
2.17.0 2024-09-15 Version 2.17.0: Java 8 is required.
2.16.1 2024-04-04 Java 8 is required.
2.16.0 2024-03-25 Java 8 is required.
2.15.1 2023-11-24 Java 8 is required.
2.15.0 2023-10-21 Java 8 is required.
2.14.0 2023-09-24 Java 8 is required.
2.13.0 2023-06-03 Java 8 is required.
2.12.0 2023-05-13 Java 8 is required.
2.11.0 2021-07-09 Java 8 is required.
2.10.0 2021-06-10 Java 8 is required.
2.9.0 2021-05-22 Java 8 is required.
2.8.0 2020-09-05 Java 8 is required.
2.7 2020-05-24 Java 8 is required.
2.6 2017-10-15 Java 7 required, Java 9 supported.
2.5 2016-04-22 New features and bug fixes.
2.4 2012-06-12 New features and bug fixes.
2.3 2012-April-10 New features and bug fixes.
2.2 2012-March-26 New features and bug fixes.
2.1 2011-Sep-28 New features and bug fixes.
2.0.1 2010-Dec-26  
2.0 2010-Oct-18  
1.4 2008-Jan-21  
1.3.2 2007-Jul-02 Bug fixes.

Release 2.18.0 – 2024-11-16

Type Changes By
Fix Clean ups in unit tests. Thanks to Gary Gregory. ggregory
Fix Fix some Javadoc issues. Thanks to Gary Gregory. ggregory
Fix RandomAccessFileMode.toString() is more helpful for debugging when it inherits from Enum. Thanks to Gary Gregory. ggregory
Fix Fix implicit narrowing conversion in compound assignment in UnsynchronizedBufferedReader.skip(long). Thanks to Gary Gregory. ggregory
Fix Missing reserved file names in FileSystem.WINDOWS (superscript digits for COM and LPT). Fixes IO-860. Thanks to Stefan Feenstra, Gary Gregory. ggregory
Fix FileUtils.listFiles(final File, String[], boolean) can throw NoSuchFileException #697, #699. Fixes IO-856. Thanks to Thomas Hartwig, Gary Gregory. ggregory
Fix FileUtils.forceDelete on non-existent file on Windows throws IOException rather than FileNotFoundException. Fixes IO-859. Thanks to JD Dean, Gary Gregory. ggregory
Fix Use Unicode escapes for superscript characters. #701. Thanks to Éamonn McManus. ggregory
Fix Recent incompatible change to FileUtils.listFiles re extensions, see also IO-856. Fixes IO-863. Thanks to Éamonn McManus, Gary Gregory. ggregory
Fix Javadoc: Update details for PathUtils "clean" behavior. Fixes IO-857. Thanks to Dmitry, Gary Gregory. ggregory
Add Add @FunctionalInterface to ClassNameMatcher. Thanks to Gary Gregory. ggregory
Add Add ValidatingObjectInputStream.Builder and ValidatingObjectInputStream.builder(). Thanks to Gary Gregory. ggregory
Add Add a "Safe Deserialization" section to the User Guide for the site. Thanks to Gary Gregory. ggregory
Add Add IORandomAccessFile. Thanks to Gary Gregory. ggregory
Add Add RandomAccessFileMode.io(String). Thanks to Gary Gregory. ggregory
Add Add FileAlterationObserver.Builder() and deprecate most constructors. Thanks to Gary Gregory. ggregory
Add Add IOUtils.readLines(CharSequence). Thanks to Gary Gregory. ggregory
Add Add ValidatingObjectInputStream.ObjectStreamClassPredicate to allow configuration reuse. Thanks to Gary Gregory. ggregory
Add Add RandomAccessFileMode.accept(Path, IOConsumer<RandomAccessFile>). Thanks to Gary Gregory. ggregory
Add Add RandomAccessFileMode.apply(Path, IOFunction<RandomAccessFile>, T). Thanks to Gary Gregory. ggregory
Add Add IOIntConsumer. Thanks to Gary Gregory. ggregory
Add Add ProxyInputStream.AbstractBuilder. Supports setting a consumer for ProxyInputStream.afterRead(int). Fixes IO-861. Thanks to Gary Gregory. ggregory
Add Add support to AutoCloseInputStream for setting a consumer for ProxyInputStream.afterRead(int). Thanks to Gary Gregory. ggregory
Add Add support to BOMInputStream for setting a consumer for ProxyInputStream.afterRead(int). Thanks to Gary Gregory. ggregory
Add Add support to BoundedInputStream for setting a consumer for ProxyInputStream.afterRead(int). Fixes IO-861. Thanks to Gary Gregory. ggregory
Add Add support to BoundedInputStream for setting a consumer for BoundedInputStream.onMaxLength(long, long). Fixes IO-861. Thanks to Gary Gregory. ggregory
Add Add support to ChecksumInputStream for setting a consumer for ProxyInputStream.afterRead(int). Thanks to Gary Gregory. ggregory
Add Add support to ThrottledInputStream for setting a consumer for ProxyInputStream.afterRead(int). Thanks to Gary Gregory. ggregory
Add Add support to ObservableInputStream for setting a consumer for ProxyInputStream.afterRead(int). Thanks to Gary Gregory. ggregory
Add Add support to MessageDigestCalculatingInputStream for setting a consumer for ProxyInputStream.afterRead(int). Thanks to Gary Gregory. ggregory
Add Add support to MessageDigestInputStream for setting a consumer for ProxyInputStream.afterRead(int). Thanks to Gary Gregory. ggregory
Update Bump org.apache.commons:commons-parent from 74 to 78 #670, #676, #679, #688. Thanks to Gary Gregory. ggregory
Update Bump commons.bytebuddy.version from 1.15.1 to 1.15.10 #672, #673, #685, #686, #694, #696, #698. Thanks to Gary Gregory. ggregory
Update Update AbstractStreamBuilder getters from protected to public. Thanks to Gary Gregory. ggregory

Release 2.17.0 – 2024-09-15

Type Changes By
Add Add IOIterator.adapt(Iterable). Thanks to Gary Gregory. ggregory
Add Add getInputStream() for 'https' and 'http' in URIOrigin #630. Fixes IO-831. Thanks to Elliotte Rusty Harold, Thach Le, Gary Gregory. ggregory
Add Add IOSupplier.getUnchecked(). Thanks to Gary Gregory. ggregory
Add Add CloseShieldInputStream.systemIn(InputStream). Thanks to Gary Gregory. ggregory
Add Add NullInputStream.init(). Thanks to Gary Gregory. ggregory
Add Add AbstractInputStream and refactor duplicate code. Thanks to Gary Gregory. ggregory
Add Add UnsynchronizedReader. Thanks to Gary Gregory. ggregory
Add Add UnsynchronizedBufferedReader. Thanks to Gary Gregory. ggregory
Fix FileUtilsWaitForTest does not test anything useful. Fixes IO-858. sebb
Fix Add missing unit tests. Thanks to Gary Gregory. ggregory
Fix FileUtils.lastModifiedFileTime(File) calls Objects.requireNonNull() on the wrong object. Thanks to Gary Gregory. ggregory
Fix PathUtils.deleteOnExit(Path) calls Objects.requireNonNull() on the wrong object. Thanks to Gary Gregory. ggregory
Fix Deprecate LineIterator.nextLine() in favor of next(). Thanks to Gary Gregory. ggregory
Fix Fix PMD UnnecessaryFullyQualifiedName. Thanks to Gary Gregory. ggregory
Fix Add test for CircularByteBuffer clear() #620. Thanks to sullis. ggregory
Fix PathUtils.isPosix(Path, LinkOption...) should return false on null input. Thanks to Gary Gregory. ggregory
Fix AutoCloseInputStream(InputStream) uses ClosedInputStream.INSTANCE when its input is null. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in ProxyInputStream.available() when the underlying input stream is null. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in ProxyInputStream.markSupported() when the underlying input stream is null. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in ProxyInputStream.mark(int) when the underlying input stream is null. Thanks to Gary Gregory. ggregory
Fix BufferedFileChannelInputStream.available() returns 0 before any reads. Thanks to Gary Gregory. ggregory
Fix BufferedFileChannelInputStream.available() should return 0 instead of -1 at the end of the stream. Thanks to Gary Gregory. ggregory
Fix BufferedFileChannelInputStream.available() should return 0 when the stream is closed instead of throwing an exception. Thanks to Gary Gregory. ggregory
Fix CharSequenceInputStream.available() should return 0 after the stream is closed. Thanks to Gary Gregory. ggregory
Fix BoundedInputStream.available() should return 0 when the stream is closed. Thanks to Gary Gregory. ggregory
Fix CircularInputStream.available() should return 0 when the stream is closed. Thanks to Gary Gregory. ggregory
Fix InfiniteCircularInputStream.available() should return 0 when the stream is closed. Thanks to Gary Gregory. ggregory
Fix ChecksumInputStream(InputStream, Checksum, long, long) should fail-fast on null Checksum input. Thanks to Gary Gregory. ggregory
Fix Deprecate NullInputStream.INSTANCE in favor of constructors. Thanks to Gary Gregory. ggregory
Fix NullInputStream.available() should return 0 after the stream is closed. Thanks to Gary Gregory. ggregory
Fix MemoryMappedFileInputStream.available() should return 0 after the stream is closed. Thanks to Gary Gregory. ggregory
Fix RandomAccessFileInputStream.available() should return 0 after the stream is closed. Thanks to Gary Gregory. ggregory
Fix ReaderInputStream.available() should return 0 after the stream is closed. Thanks to Gary Gregory. ggregory
Fix AutoCloseInputStream does not call handleIOException() on close() when the proxied stream throws an IOException. Thanks to Gary Gregory. ggregory
Fix BoundedInputStream does not call handleIOException() on close() when the proxied stream throws an IOException. Thanks to Gary Gregory. ggregory
Fix NullInputStream.read(*) should throw IOException when it is closed. Thanks to Gary Gregory. ggregory
Fix NullInputStream.read(byte[]) should return 0 when the input byte array in length 0. Thanks to Gary Gregory. ggregory
Fix NullInputStream.read(byte[], int, int) should return 0 when the input byte array in length 0 or requested length is 0. Thanks to Gary Gregory. ggregory
Fix MarkShieldInputStream.read(*) should throw IOException when it is closed. Thanks to Gary Gregory. ggregory
Fix Replace deprecated constant FileFileFilter.FILE in Javadoc #657. Thanks to aelaort. ggregory
Fix Pick up exec-maven-plugin version from parent POM. Thanks to Gary Gregory. ggregory
Update Bump tests commons.bytebuddy.version from 1.14.13 to 1.15.1 #615, #621, #631, #635, #642, #658, #663, #665. Thanks to Dependabot. ggregory
Update Bump tests commons-codec:commons-codec from 1.16.1 to 1.17.1 #644. Thanks to Dependabot. ggregory
Update Bump org.codehaus.mojo:exec-maven-plugin from 3.2.0 to 3.4.1 #632, #652, #659. Thanks to Dependabot. ggregory
Update Bump org.apache.commons:commons-parent from 69 to 74 #628, #637, #649, #661, #664. Thanks to Dependabot. ggregory
Update Bump org.apache.commons:commons-lang3 from 3.14.0 to 3.17.0 #645, #653, #666. Thanks to Dependabot. ggregory

Release 2.16.1 – 2024-04-04

Type Changes By
Fix Reimplement FileSystemUtils using NIO. Thanks to Gary Gregory. ggregory
Fix FileSystemUtils no longer throws IllegalStateException. Fixes IO-851. Thanks to Sebb, Gary Gregory. ggregory
Fix Avoid possible NullPointerException in FileUtils.listAccumulate(File, IOFileFilter, IOFileFilter, FileVisitOption...). Thanks to Gary Gregory. ggregory
Fix BoundedInputStream.reset() not updating count. Fixes IO-853. Thanks to Mike Drob, Gary Gregory. ggregory
Fix ThresholdingOutputStream: a negative threshold should behave like a zero threshold and trigger the event on the first write #609. Fixes IO-854. Thanks to rproserpio, Bill Orpet, Gary Gregory. ggregory
Update Bump commons.bytebuddy.version from 1.14.12 to 1.14.13 #605. Thanks to Gary Gregory. ggregory
Update Bump org.apache.commons:commons-parent from 67 to 69 #608. Thanks to Gary Gregory, Dependabot. ggregory

Release 2.16.0 – 2024-03-25

Type Changes By
Fix Fix and re-enable testSkip_RequiredCharsets #518. Thanks to Elliotte Rusty Harold. ggregory
Fix SymbolicLineFileFilter documentation fixes. Fixes IO-824. Thanks to Miguel Munoz, Gary Gregory. ggregory
Fix CharSequenceInputStream.reset() only works once #520. Fixes IO-795. Thanks to Miguel Munoz, Gary Gregory. ggregory
Fix Finish TODO on CharSequenceInputStream #540. Fixes IO-795. Thanks to Elliotte Rusty Harold. ggregory
Fix Add byte array size validation for methods in EndianUtils #521. Fixes IO-825. Thanks to Arthur Chan, Gary Gregory. ggregory
Fix Add missing test case CircularByteBufferTest. Fixes IO-825. Thanks to dkdal, Gary Gregory. ggregory
Fix Make CharSequenceInputStream.available() more correct in the face of multibyte encodings #525. Fixes IO-781. Thanks to Elliotte Rusty Harold. ggregory
Fix Remove unreachable code in AbstractIOFileFilterTest #526. Fixes IO-781. Thanks to Elliotte Rusty Harold. ggregory
Fix Rationalize and unify checking for existence of files and directories #529. Fixes IO-808. Thanks to Elliotte Rusty Harold. ggregory
Fix Avoid NullPointerException in IOCase.checkEquals(String, String) on null input. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in CanExecuteFileFilter.accept(File) on null input. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in CanExecuteFileFilter.accept(Path, BasicFileAttributes) on null input. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in CanReadFileFilter.accept(File) on null input. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in CanReadFileFilter.accept(Path, BasicFileAttributes) on null input. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in CanWriteFileFilter.accept(File) on null input. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in CanWriteFileFilter.accept(Path, BasicFileAttributes) on null input. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in DirectoryFileFilter.accept(File) on null input. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in DirectoryFileFilter.accept(Path, BasicFileAttributes) on null input. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in EmptyFileFilter.accept(File) on null input. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in EmptyFileFilter.accept(Path, BasicFileAttributes) on null input. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in FileFileFilter.accept(File) on null input. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in FileFileFilter.accept(Path, BasicFileAttributes) on null input. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in HiddenFileFilter.accept(File) on null input. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in HiddenFileFilter.accept(Path, BasicFileAttributes) on null input. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in IOCase.checkIndexOf(String, int, String) on null input. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in IOCase.checkRegionMatches(String, int, String) on null input. Thanks to Gary Gregory. ggregory
Fix BoundedInputStream.getCount() should not count EOF. Thanks to Gary Gregory. ggregory
Fix Modernize temporary file creation and deletion in DeferredFileOutputStreamTest #535. Thanks to Elliotte Rusty Harold, Gary Gregory. ggregory
Fix Add PathMatcher to IOFileFilter class Javadoc #536. Thanks to Elliotte Rusty Harold. ggregory
Fix Fix CharSequenceInputStream coding exception handling #537. Fixes IO-781. Thanks to Marcono1234. ggregory
Fix Deprecate int CountingInputStream#getCount() in favor of long CountingInputStream#getByteCount(). Fixes IO-781. Thanks to Marcono1234. ggregory
Fix Deprecate CountingInputStream.resetCount() in favor of resetByteCount(). Fixes IO-828. Thanks to Elliotte Rusty Harold, Gary Gregory. ggregory
Fix Deprecate CountingInputStream.getMaxLength() in favor of getMaxCount()). Fixes IO-828. Thanks to Gary Gregory. ggregory
Fix NullInputStream breaks InputStream's read method contract. Fixes IO-818. Thanks to Gary Gregory. ggregory
Fix Javadoc shouldn't reference 1.x behavior #539. Thanks to Elliotte Rusty Harold. ggregory
Fix Don't decode and reencode characters in a potentially different charset in AbstractOrigin.CharSequenceOrigin.getReader(Charset). Fixes IO-829. Thanks to Elliotte Rusty Harold, Gary Gregory. ggregory
Fix Let subclasses of CountingInputStream.afterRead(int) throw IOException. Thanks to Gary Gregory. ggregory
Fix Characterization test for broken symlinks when copying directories #547. Fixes IO-807. Thanks to Elliotte Rusty Harold, Gary Gregory. ggregory
Fix ClosedInputStream.read(byte[], int, int) does not always return -1. Thanks to Gary Gregory. ggregory
Fix ClosedOutputStream.write(byte[], int, int) does not always throw IOException. Thanks to Gary Gregory. ggregory
Fix XmlStreamReader can't parse an XML document with a multi-line prolog #550. Thanks to Sylwester Lachiewicz, Gary Gregory. ggregory
Fix XmlStreamReader can't parse XML an document with an external parsed entity prolog. Thanks to Andreas Hubold, Gary Gregory. ggregory
Fix Update FileNameUtils Javadoc #554. Fixes IO-836. Thanks to Elliotte Rusty Harold. ggregory
Fix Copy symlinks, not the files the symlinks point to #558. Fixes IO-807. Thanks to Jordi Sola, Elliotte Rusty Harold. ggregory
Fix Pickup apache-rat-plugin version from parent POM. Thanks to Gary Gregory. ggregory
Fix Add test for copying a symlink FileUtilsTest#testCopyFile_symLink() #564. Thanks to Elliotte Rusty Harold. ggregory
Fix Make copyFile copy symbolic links by value rather than reference #565. Thanks to Elliotte Rusty Harold. ggregory
Fix Deprecate CopyUtils 0-argument constructor. Thanks to Gary Gregory. ggregory
Fix Deprecate EndianUtils 0-argument constructor. Fixes IO-843. Thanks to Gary Gregory, Elliotte Rusty Harold. ggregory
Fix Deprecate FileSystemUtils 0-argument constructor. Thanks to Gary Gregory. ggregory
Fix Deprecate FilenameUtils 0-argument constructor. Thanks to Gary Gregory. ggregory
Fix Deprecate RandomAccessFiles 0-argument constructor. Thanks to Gary Gregory. ggregory
Fix Clarify and correct EndianUtils and SwappedDataInputStream API doc #566. Thanks to Elliotte Rusty Harold, Gary Gregory. ggregory
Fix Add characterization test for copying a symlinked directory #570. Thanks to Elliotte Rusty Harold. ggregory
Fix RandomAccessFileInputStream.builder().get() now throws ISE instead of NPE. Thanks to Gary Gregory. ggregory
Fix Test links to targets outside the source directory #571. Fixes IO-845. Thanks to Elliotte Rusty Harold. ggregory
Fix Focus Javadoc on current version rather than past versions #573, #574. Thanks to Elliotte Rusty Harold. ggregory
Fix "Self-suppression not permitted" while using BrokenOutput and BrokenInput streams with try-with-resources. Fixes IO-469. Thanks to Grigory Fadeev, Kristian Rosenvold, Elliotte Rusty Harold. ggregory
Fix Handle zero and negative thresholds #587. Fixes IO-405. Thanks to Elliotte Rusty Harold. ggregory
Fix Deprecate CountingInputStream in favor of BoundedInputStream. Thanks to Gary Gregory. ggregory
Fix PathUtils.setPosixPermissions(...) only sets permissions if needed. Thanks to Gary Gregory. ggregory
Fix PathUtils.setReadOnly(...) only sets permissions if needed. Thanks to Gary Gregory. ggregory
Fix PathUtils.deleteFile(..., DeleteOption...) only sets permissions if needed. Thanks to Gary Gregory. ggregory
Fix CleaningPathVisitor only sets permissions if needed. Thanks to Gary Gregory. ggregory
Fix DeletingPathVisitor only sets permissions if needed. Thanks to Gary Gregory. ggregory
Add Add and use PathUtils.getFileName(Path, Function<Path, R>). Thanks to Gary Gregory. ggregory
Add Add and use PathUtils.getFileNameString(). Thanks to Gary Gregory. ggregory
Add Make public Erase.rethrow(Throwable). Thanks to Gary Gregory. ggregory
Add Add BrokenInputStream.BrokenInputStream(Throwable). Fixes IO-826. Thanks to markslater, Gary Gregory. ggregory
Add Add BrokenReader.BrokenReader(Throwable). Fixes IO-826. Thanks to markslater, Gary Gregory. ggregory
Add Add BrokenOutputStream.BrokenOutputStream(Throwable). Fixes IO-826. Thanks to markslater, Gary Gregory. ggregory
Add Add BrokenWriter.BrokenWriter(Throwable). Fixes IO-826. Thanks to markslater, Gary Gregory. ggregory
Add Add BoundedInputStream.getRemaining(). Thanks to Gary Gregory. ggregory
Add Add FileTimes.toNtfsTime(long). Thanks to Gary Gregory. ggregory
Add Add FileTimes.fromUnixTime(long). Thanks to Gary Gregory. ggregory
Add Add FileTimes.isUnixTime(FileTime). Thanks to Gary Gregory. ggregory
Add Add FileTimes.isUnixTime(long). Thanks to Gary Gregory. ggregory
Add Add FileTimes.toUnixTime(FileTime). Thanks to Gary Gregory. ggregory
Add Add BrokenInputStream.Builder. Thanks to Gary Gregory. ggregory
Add Add PathUtils.getExtension(Path). Thanks to Gary Gregory. ggregory
Add Add PathUtils.getBaseName(Path). Thanks to Gary Gregory. ggregory
Add Add ThrottledInputStream. Thanks to Gary Gregory. ggregory
Add Add IORunnable.noop(). Thanks to Gary Gregory. ggregory
Add Add ChecksumInputStream and test #548. Thanks to Gary Gregory. ggregory
Add Add AbstractStreamBuilder.getReader(). Thanks to Gary Gregory. ggregory
Add Add Maven property project.build.outputTimestamp for build reproducibility. Thanks to Gary Gregory. ggregory
Add Add ProxyInputStream.unwrap(). Thanks to Gary Gregory. ggregory
Add Add a running count and builder to BoundedInputStream. Thanks to Gary Gregory. ggregory
Update Bump commons.bytebuddy.version from 1.14.10 to 1.14.12 #534, #592. Thanks to Gary Gregory. ggregory
Update Bump org.apache.commons:commons-parent from 65 to 67. Thanks to Gary Gregory. ggregory
Update Bump commons-codec:commons-codec from 1.16.0 to 1.16.1 #583. Thanks to Dependabot. ggregory
Update Bump org.codehaus.mojo:exec-maven-plugin from 3.1.1 to 3.2.0 #593. Thanks to Dependabot. ggregory

Release 2.15.1 – 2023-11-24

Type Changes By
Fix Fix wrong issue id in change log #503. Thanks to Gregor Dschung. sebb
Fix Add test for FileChannels.contentEquals() #509. Thanks to Stephan Markwalder, Gary Gregory. ggregory
Fix Fix FileChannels.contentEquals(). Thanks to Gary Gregory. ggregory
Fix Fix some Javadoc issues in LineIterator and IOUtils. Thanks to Gary Gregory. ggregory
Fix Simplify FileAlterationObserver internal processing. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in RegexFileFilter.RegexFileFilter(Pattern). Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in RegexFileFilter.accept(Path, BasicFileAttributes). Thanks to Gary Gregory. ggregory
Fix Fix SpotBugs error: Class org.apache.commons.io.filefilter.RegexFileFilter defines non-transient non-serializable instance field pathToString [org.apache.commons.io.filefilter.RegexFileFilter] In RegexFileFilter.java SE_BAD_FIELD. Thanks to Gary Gregory. ggregory
Fix Fix SpotBugs error: Class org.apache.commons.io.filefilter.DelegateFileFilter defines non-transient non-serializable instance field fileFilter [org.apache.commons.io.filefilter.DelegateFileFilter] In DelegateFileFilter.java SE_BAD_FIELD. Thanks to Gary Gregory. ggregory
Fix Fix SpotBugs error: Class org.apache.commons.io.filefilter.DelegateFileFilter defines non-transient non-serializable instance field fileNameFilter [org.apache.commons.io.filefilter.DelegateFileFilter] In DelegateFileFilter.java SE_BAD_FIELD. Thanks to Gary Gregory. ggregory
Fix Fix SpotBugs error: org.apache.commons.io.function.IOStream$1.next() cannot throw NoSuchElementException [org.apache.commons.io.function.IOStream$1] At IOStream.java:[line 98] IT_NO_SUCH_ELEMENT. Thanks to Gary Gregory. ggregory
Fix Fix SpotBugs error: org.apache.commons.io.monitor.FileAlterationMonitor.getObservers() may expose internal representation by returning FileAlterationMonitor.observers [org.apache.commons.io.monitor.FileAlterationMonitor] At FileAlterationMonitor.java:[line 124] EI_EXPOSE_REP. Thanks to Gary Gregory. ggregory
Fix Fix SpotBugs error: Class org.apache.commons.io.monitor.FileAlterationObserver defines non-transient non-serializable instance field fileFilter [org.apache.commons.io.monitor.FileAlterationObserver] In FileAlterationObserver.java SE_BAD_FIELD. Thanks to Gary Gregory. ggregory
Fix Fix SpotBugs error: Class org.apache.commons.io.monitor.FileAlterationObserver defines non-transient non-serializable instance field listeners [org.apache.commons.io.monitor.FileAlterationObserver] In FileAlterationObserver.java SE_BAD_FIELD. Thanks to Gary Gregory. ggregory
Fix Fix SpotBugs error: org.apache.commons.io.FileCleaningTracker.getDeleteFailures() may expose internal representation by returning FileCleaningTracker.deleteFailures [org.apache.commons.io.FileCleaningTracker] At FileCleaningTracker.java:[line 218] EI_EXPOSE_REP. Thanks to Gary Gregory. ggregory
Fix Fix SpotBugs error: org.apache.commons.io.IOExceptionList.getCauseList() may expose internal representation by returning IOExceptionList.causeList [org.apache.commons.io.IOExceptionList] At IOExceptionList.java:[line 118] EI_EXPOSE_REP. Thanks to Gary Gregory. ggregory
Fix Fix SpotBugs error: org.apache.commons.io.IOExceptionList.getCauseList(Class) may expose internal representation by returning IOExceptionList.causeList [org.apache.commons.io.IOExceptionList] At IOExceptionList.java:[line 129] EI_EXPOSE_REP. Thanks to Gary Gregory. ggregory
Fix Fix SpotBugs error: org.apache.commons.io.file.AccumulatorPathVisitor.getDirList() may expose internal representation by returning AccumulatorPathVisitor.dirList [org.apache.commons.io.file.AccumulatorPathVisitor] At AccumulatorPathVisitor.java:[line 179] EI_EXPOSE_REP. Thanks to Gary Gregory. ggregory
Fix Fix SpotBugs error: org.apache.commons.io.file.AccumulatorPathVisitor.getFileList() may expose internal representation by returning AccumulatorPathVisitor.fileList [org.apache.commons.io.file.AccumulatorPathVisitor] At AccumulatorPathVisitor.java:[line 188] EI_EXPOSE_REP. Thanks to Gary Gregory. ggregory
Fix Fix SpotBugs error: org.apache.commons.io.input.ObservableInputStream.getObservers() may expose internal representation by returning ObservableInputStream.observers [org.apache.commons.io.input.ObservableInputStream] At ObservableInputStream.java:[line 187] EI_EXPOSE_REP. Thanks to Gary Gregory. ggregory
Fix Fix SpotBugs error: Exception thrown in class org.apache.commons.io.input.UnsynchronizedByteArrayInputStream at new org.apache.commons.io.input.UnsynchronizedByteArrayInputStream(byte[], int) will leave the constructor. The object under construction remains partially initialized and may be vulnerable to Finalizer attacks. [org.apache.commons.io.input.UnsynchronizedByteArrayInputStream, org.apache.commons.io.input.UnsynchronizedByteArrayInputStream] At UnsynchronizedByteArrayInputStream.java:[line 202]At UnsynchronizedByteArrayInputStream.java:[line 202] CT_CONSTRUCTOR_THROW. Thanks to Gary Gregory. ggregory
Fix Fix SpotBugs error: Exception thrown in class org.apache.commons.io.input.UnsynchronizedByteArrayInputStream at new org.apache.commons.io.input.UnsynchronizedByteArrayInputStream(byte[], int, int) will leave the constructor. The object under construction remains partially initialized and may be vulnerable to Finalizer attacks. [org.apache.commons.io.input.UnsynchronizedByteArrayInputStream, org.apache.commons.io.input.UnsynchronizedByteArrayInputStream] At UnsynchronizedByteArrayInputStream.java:[line 223]At UnsynchronizedByteArrayInputStream.java:[line 223] CT_CONSTRUCTOR_THROW. Thanks to Gary Gregory. ggregory
Update Bump org.codehaus.mojo:exec-maven-plugin from 3.1.0 to 3.1.1 #512. Thanks to Gary Gregory. ggregory
Update Bump commons-lang3 from 3.13.0 to 3.14.0. Thanks to Gary Gregory. ggregory
Update Bump commons.bytebuddy.version from 1.14.9 to 1.14.10 #516. Thanks to Dependabot. ggregory
Update Bump commons-parent from 64 to 65. Thanks to Dependabot. ggregory

Release 2.15.0 – 2023-10-21

Type Changes By
Fix XmlStreamReader encoding match RE is too strict. Fixes IO-815. Thanks to Laurence Gonsalves. sebb
Fix Javadoc in FileUtils does not reflect code for thrown exceptions. Fixes IO-810. Thanks to Gregor Dschung, Gary Gregory. ggregory
Fix Javadoc should mention closing Streams based on file resources. Fixes IO-812. Thanks to Adam Rauch, Gary Gregory. ggregory
Fix In tests, Files.walk() direct and indirect callers fail to close the returned Stream. Fixes IO-811. Thanks to Adam Rauch, Gary Gregory. ggregory
Fix FileUtils.listFiles(File, String[], boolean) fails to close its internal Stream. Fixes IO-811. Thanks to Adam Rauch, Gary Gregory. ggregory
Fix FileUtils.iterateFiles(File, String[], boolean) fails to close its internal Stream. Fixes IO-811. Thanks to Adam Rauch, Gary Gregory. ggregory
Fix StreamIterator fails to close its internal Stream. Fixes IO-811. Thanks to Adam Rauch, Gary Gregory. ggregory
Fix Don't throw UncheckedIOException #491. Fixes IO-814. Thanks to Elliotte Rusty Harold, Gary Gregory. ggregory
Fix Don't write a BOM on every (or any) line #492. Fixes IO-414. Thanks to Elliotte Rusty Harold, Gary Gregory. ggregory
Fix RandomAccessFileMode.create(Path) provides a better NullPointerException message. Fixes IO-814. Thanks to Gary Gregory. ggregory
Fix Improve performance of PathUtils.fileContentEquals(Path, Path, LinkOption[], OpenOption[]) by about 60%, see PathUtilsContentEqualsBenchmark. Thanks to Gary Gregory. ggregory
Fix Improve performance of PathUtils.fileContentEquals(Path, Path) by about 60%, see PathUtilsContentEqualsBenchmark. Thanks to Gary Gregory. ggregory
Fix Improve performance of FileUtils.contentEquals(File, File) by about 60%, see PathUtilsContentEqualsBenchmark. Thanks to Gary Gregory. ggregory
Fix Remove unused test code #494. Thanks to Elliotte Rusty Harold. ggregory
Fix [Javadoc] IOUtils#contentEquals does not throw NullPointerException #496. Thanks to sebbASF. ggregory
Fix Fix CodeQL warnings in UnsynchronizedBufferedInputStream: Implicit narrowing conversion in compound assignment. Thanks to Gary Gregory. ggregory
Fix MessageDigestCalculatingInputStream.MessageDigestMaintainingObserver.MessageDigestMaintainingObserver(MessageDigest) now throws a NullPointerException if the MessageDigest is null. Thanks to Gary Gregory. ggregory
Fix MessageDigestCalculatingInputStream.MessageDigestCalculatingInputStream(InputStream, MessageDigest) now throws a NullPointerException if the MessageDigest is null. Thanks to Gary Gregory. ggregory
Fix UnsynchronizedBufferedInputStream.read(byte[], int, int) does not use buffer. Fixes IO-816. Thanks to Andreas Loth, Gary Gregory. ggregory
Fix Pick up Maven Moditect plugin version from parent POM. Thanks to Gary Gregory. ggregory
Fix 2.15.0 breaks backwards compatibility in PathUtils.fileContentEquals for the Zip file system. Fixes IO-821. Thanks to Frédéric Hannes, Gary Gregory. ggregory
Add Add org.apache.commons.io.channels.FileChannels. Thanks to Gary Gregory. ggregory
Add Add RandomAccessFiles#contentEquals(RandomAccessFile, RandomAccessFile). Thanks to Gary Gregory. ggregory
Add Add RandomAccessFiles#reset(RandomAccessFile). Thanks to Gary Gregory. ggregory
Add Add PathUtilsContentEqualsBenchmark. Thanks to Gary Gregory. ggregory
Add Add org.apache.commons.io.StreamIterator. Thanks to Gary Gregory. ggregory
Add Add MessageDigestInputStream and deprecate MessageDigestCalculatingInputStream. Thanks to Gary Gregory. ggregory
Update Bump org.apache.commons:commons-parent from 62 to 64. Thanks to Gary Gregory. ggregory

Release 2.14.0 – 2023-09-24

Type Changes By
Fix ReaderInputStream.read() throws an exception instead of returning -1 when called again after returning -1. Fixes IO-799. Thanks to Jeroen van der Vegt, Gary Gregory. ggregory
Fix FileUtils.forceMkdirParent() Javadoc is incorrect. Fixes IO-804. Thanks to Elliotte Rusty Harold, Gary Gregory. ggregory
Fix [StepSecurity] ci: Harden GitHub Actions #461. Thanks to step-security-bot, Gary Gregory. ggregory
Fix MagicNumberFileFilter.accept(Path, BasicFileAttributes) doesn't set its byteOffset before reading. Thanks to Gary Gregory. ggregory
Fix Javadoc improvements. Thanks to Gary Gregory. ggregory
Fix Spelling #468. Thanks to Josh Soref, Gary Gregory. ggregory
Fix Use assertThrows #475. Thanks to Jakub Kupczyk. ggregory
Add Add DeferredFileOutputStream.getPath(). Thanks to Gary Gregory. ggregory
Add Add FileCleaningTracker.track(Path, Object[, FileDeleteStrategy]). Thanks to Gary Gregory. ggregory
Add Add IOUtils.skip[Fully](InputStream, long, Supplier<byte[]>). Thanks to Gary Gregory. ggregory
Add Add FilesUncheck.find(Path, int, BiPredicate%lt;Path, BasicFileAttributes>, FileVisitOption...) Thanks to Gary Gregory. ggregory
Add Add IOIntSupplier. Thanks to Gary Gregory. ggregory
Add Add IOLongSupplier. Thanks to Gary Gregory. ggregory
Add Add Uncheck.getAsInt(IOIntSupplier [, Supplier<String>]). Thanks to Gary Gregory. ggregory
Add Add Uncheck.getAsLong(IOLongSupplier [, Supplier<String>]). Thanks to Gary Gregory. ggregory
Add Add Uncheck.run(IORunnable, Supplier<String>) Thanks to Gary Gregory. ggregory
Add Add Uncheck.get(IOSupplier, Supplier<String>) Thanks to Gary Gregory. ggregory
Add IOFileFilter now also extends java.nio.file.PathMatcher. Thanks to Gary Gregory. ggregory
Add Add PathMatcherFileFilter to adapt java.nio.file.PathMatcher. Thanks to Gary Gregory. ggregory
Add Add ThresholdingOutputStream.getOutputStream() and deprecate getStream(). Thanks to Gary Gregory. ggregory
Add Add DeferredFileOutputStream.Builder.setOutputFile(Path). Thanks to Gary Gregory. ggregory
Add Add DeferredFileOutputStream.Builder.setDirectory(Path). Thanks to Gary Gregory. ggregory
Add Add AbstractStreamBuilder.setBufferSizeChecker(IntToIntFunction). Thanks to Gary Gregory. ggregory
Add Add AbstractStreamBuilder.setBufferSizeMax(int). Thanks to Gary Gregory. ggregory
Update Bump jimfs from 1.2 to 1.3.0 #465 (tests). Thanks to Dependabot. ggregory
Update Bump commons-parent from 58 to 62. Thanks to Gary Gregory. ggregory
Update Bump commons-lang3 from 3.12 to 3.13.0. Thanks to Gary Gregory. ggregory

Release 2.13.0 – 2023-06-03

Type Changes By
Fix Regression in FileUtils.touch() - no longer creates parent directories. Fixes IO-791. Thanks to Chad Wilson, Gary Gregory. ggregory
Fix ByteArrayOrigin should be able convert a byte[] to a ByteArrayInputStream. Thanks to Gary Gregory. ggregory
Fix AbstractOriginSupplier.checkOrigin() now throws IllegalStateException instead of NullPointerException. Thanks to Gary Gregory. ggregory
Fix FileAlreadyExistsException in PathUtils.createParentDirectories(Path, LinkOption, FileAttribute...). Fixes IO-796. Thanks to Giacomo Boccardo, Gary Gregory. ggregory
Fix Only read the relevant portion of a file in AbstractOrigin.FileOrigin.getByteArray(long, int). Thanks to Gary Gregory. ggregory
Fix Only read the relevant portion of a file in AbstractOrigin.PathOrigin.getByteArray(long, int). Thanks to Gary Gregory. ggregory
Fix DeferredFileOutputStream throws exception when system temp dir is a symlink. Fixes IO-798. Thanks to Shai Shapira, Gary Gregory. ggregory
Fix ReaderInputStream.Builder.setCharsetEncoder(null) should reset to a default object, not throw an NPE. Thanks to Gary Gregory. ggregory
Fix ReaderInputStream.Builder.setCharset(null) should reset to a default object, not throw an NPE. Thanks to Gary Gregory. ggregory
Fix Fix back-incompatible change for PathUtils.deleteDirectory(): throw NoSuchFileException instead of IllegalArgumentException #459. Fixes IO-800. Thanks to Jan Høydahl, Gary Gregory. ggregory
Fix Deprecation documentation gives incorrect alternative. Fixes IO-801. Thanks to James Howe, Gary Gregory. ggregory
Add Add CharSequenceInputStream.Builder. Thanks to Gary Gregory. ggregory
Add Add ChunkedOutputStream.Builder. Thanks to Gary Gregory. ggregory
Add Add AbstractStreamBuilder.setOpenOptions(OpenOption...). Thanks to Gary Gregory. ggregory
Add Add some missing conversions to AbstractOrigin subclasses. Thanks to Gary Gregory. ggregory
Add Add AbstractOrigin.getByteArray(long, int). Thanks to Gary Gregory. ggregory
Add Add and use RandomAccessFiles. Thanks to Gary Gregory. ggregory
Add Add AbstractOrigin.size(). Thanks to Gary Gregory. ggregory
Add Add PathUtils.EMPTY_FILE_ATTRIBUTE_ARRAY. Thanks to Gary Gregory. ggregory
Add Add CharSequenceInputStream.Builder.setCharsetEncoder(CharsetEncoder). Thanks to Gary Gregory. ggregory
Add Add CharsetEncoders.toCharsetEncoder(CharsetEncoder, Supplier<CharsetEncoder>). Thanks to Gary Gregory. ggregory
Update Bump commons-parent from 57 to 58. Thanks to Gary Gregory, Dependabot. ggregory

Release 2.12.0 – 2023-05-13

Type Changes By
Fix IOUtils.toByteArray size validation does not match documentation. Fixes IO-697. Thanks to otter606. kinow
Fix Fix Javadoc links to the JRE Javadoc 8. Thanks to Gary Gregory. ggregory
Fix FileWriterWithEncoding for an existing file no longer truncates the file. #251. Fixes IO-744. Thanks to RBRi, Gary Gregory. ggregory
Fix A null Charset or Charset name in FileWriterWithEncoding constructors uses the default Charset. Thanks to Gary Gregory. ggregory
Fix Fix usage of assertNotNull #269. Thanks to Davide Angelocola. ggregory
Fix FilenameUtils directoryContains() should handle files with the same prefix #217. Fixes IO-727. Thanks to trungPa, Gary Gregory. ggregory
Add Drop unnecessary casts and conversions #267. Fixes IO-746. Thanks to Davide Angelocola. ggregory
Fix FileUtils.moveToDirectory() exception documentation and exception message error. Fixes IO-748. Thanks to Dirk Heinrichs, Gary Gregory, Elango Ravi. ggregory
Fix ThreadMonitor.sleep(Duration) ignores nanoseconds. Thanks to Gary Gregory. ggregory
Fix Fix Javadoc in ThreadMonitor#run() method. #273. Thanks to Arturo Bernal. ggregory
Fix FileUtils.listFiles() does not list matching files if File parameter is a symbolic link. Fixes IO-749. Thanks to haihuiyang, Gary Gregory. ggregory
Fix Fix typo in Javadocs for FileUtils#convertFileCollectionToFileArray() #276. Thanks to niranjanghule, Gary Gregory. ggregory
Fix Avoid Code Duplication: Reuse Sleep from ThreadMonitor #66. Thanks to DaGeRe, Gary Gregory. ggregory
Fix FileUtils.iterateFiles also lists directories. Fixes IO-750. Thanks to Sita Geßner, Sebastian Peters, Gary Gregory. ggregory
Fix Wrong exception message in FileUtils.setLastModified(File, File). Fixes IO-721. Thanks to Dirk Heinrichs, Gary Gregory. ggregory
Fix Infinite loop in ReaderInputStream instead of throwing exception for CodingErrorAction.REPORT. Fixes IO-717. Thanks to Marcono1234, Gary Gregory. ggregory
Fix ReaderInputStream enter infinite loop for too small buffer sizes. Fixes IO-716. Thanks to Marcono1234, Gary Gregory. ggregory
Fix Infinite loop in CharSequenceInputStream.read for 4-byte characters with UTF-8 and 3-byte buffer. Fixes IO-638. Thanks to Thayne McCombs, Gary Gregory. ggregory
Fix PathUtils.setReadOnly(Path, boolean, LinkOption...) should add READ_* file attributes when using POSIX. Fixes IO-638. Thanks to Gary Gregory. ggregory
Fix PathUtils.setReadOnly(Path, boolean, LinkOption...) readOnly argument is always assumed true on POSIX. Fixes IO-638. Thanks to Gary Gregory. ggregory
Fix Prevent IllegalArgumentExceptions in BrokenInputStream/Reader/OutputStream/Writer #278. Fixes IO-729. Thanks to Rob Spoor, Gary Gregory. ggregory
Fix FileUtils.copyURLToFile(URL, File, int, int) leaks its URLConnection. Called by FileUtils.copyURLToFile(URL, File). Thanks to Gary Gregory. ggregory
Fix Fixed ReaderInputStream not calling CharsetEncoder.flush issue #283. Fixes IO-714. Thanks to kevinwang1975, Gary Gregory. ggregory
Fix Minor changes #287. Thanks to Arturo Bernal. ggregory
Fix Update FileWriterWithEncoding to extend ProxyWriter #296. Fixes IO-756. Thanks to wodencafe, Gary Gregory, Bruno P. Kinoshita. ggregory
Fix Initialize the message of an IOExceptionList to a default if null. Thanks to Gary Gregory. ggregory
Fix When deleting symlinks, File/PathUtils.deleteDirectory() changes file permissions of the target. Fixes IO-751. Thanks to Gary Gregory, Richard Cyganiak. ggregory
Fix ReaderInputStream maps null Charset, Charset name, and CharsetEncoder to the platform default instead of throwing a NullPointerException. Thanks to Gary Gregory. ggregory
Fix CharSequenceInputStream maps null Charset and Charset name to the platform default instead of throwing a NullPointerException. Thanks to Gary Gregory. ggregory
Fix WriterOutputStream maps null Charset, Charset name, and CharsetEncoder name to the platform default instead of throwing a NullPointerException. Thanks to Gary Gregory. ggregory
Fix FileUtils.copyURLToFile should create target parent directories and overwrite target file #319. Thanks to Chad Wilson, Gary Gregory. ggregory
Fix Fix incorrect FilenameUtils Javadoc for null bytes #310. Fixes IO-484. Thanks to Marcono1234, Gary Gregory. ggregory
Fix Change to uppercase variable constant. #323. Fixes IO-484. Thanks to Arturo Bernal. ggregory
Fix IOCase.isCaseSensitive(IOCase) result is backward #325. Fixes IO-484. Thanks to David Huang, Gary Gregory. ggregory
Fix Deprecate PathUtils.NOFOLLOW_LINK_OPTION_ARRAY in favor of noFollowLinkOptionArray(). Fixes IO-758. Thanks to Marcono1234, Gary Gregory. ggregory
Fix Improve ReaderInputStream documentation #291. Thanks to Marcono1234, Gary Gregory. ggregory
Fix Fix misleading comments in FileFilterTest #334. Thanks to richarda23. ggregory
Fix Add missing Javadoc for exceptions thrown for invalid arguments #339. Thanks to Diego Marcilio. ggregory
Fix FileFilterTest minor fixes #340. Thanks to richarda23. ggregory
Fix IOUtils.write() throws OutOfMemoryError/NegativeArraySizeException while writing big strings #343. Fixes IO-764. Thanks to DaGeRe, Gary Gregory. ggregory
Fix Add reserved Windows file names CONIN$ and CONOUT$ to FileSystem #355. Fixes IO-768. Thanks to Marcono1234, Michael Osipov. ggregory
Fix RegexFileFilter is no longer Serializable. Fixes IO-773. Thanks to Dominik Reinarz, Gary Gregory. ggregory
Fix [Javadoc] FileFilterUtils doc does not match impl: missing some file filters. Fixes IO-763. Thanks to Richard Adams, Gary Gregory. ggregory
Fix FileSystem.WINDOWS.isReservedFileName doesn't check for file extension. Fixes IO-762. Thanks to Leonidas Chiron, Gary Gregory. ggregory
Fix Confusing Javadoc on IOUtils#resourceToURL() and other resource* methods. Fixes IO-772. Thanks to Dan Ziemba, Gary Gregory. ggregory
Fix FileUtils.copyFile methods throw an unnecessary "Failed to copy full contents from" exception. Fixes IO-443. Thanks to Dan Ziemba, Gary Gregory. ggregory
Fix Pick up Javadoc from super for override write() methods in AbstractByteArrayOutputStream and ByteArrayOutputStream. Fixes IO-564. Thanks to Hao Zhong, Bernd Eckenfels, Pascal Schumacher, Gary Gregory. ggregory
Fix Fix minor typos #367. Thanks to Marc Wrobel. ggregory
Fix Fix parameters to requireNonNull call in DeferredOutputSteam #368. Fixes IO-776. Thanks to Chris Povirk. kinow
Fix Fix PathUtils.copyFileToDirectory(URL,Path,CopyOption[]). Thanks to Gary Gregory. ggregory
Fix FileUtils.doCopyFile uses different methods to check the file sizes. Fixes IO-386. Thanks to Sebb, Bernd Eckenfels, zhipengxu, Gary Gregory. ggregory
Fix Fix typos #375. Thanks to Michael Ernst. ggregory
Fix FilenameUtils.normalize javadoc and tests #383. Fixes IO-611. Thanks to Fedor Urvanov. ggregory
Fix Better docs in IOUtils and IOUtils.byteArray(int size) #374. Fixes IO-611. Thanks to ArdenL-Liu, Bruno P. Kinoshita, Gary Gregory. ggregory
Fix SequenceReader should close readers when its close method is called #391. Fixes IO-782. Thanks to Matteo Di Giovinazzo, Gary Gregory. ggregory
Fix Fix symbolic link file filter #450. Fixes IO-790. Thanks to Miguel Muñoz, Gary Gregory. ggregory
Fix Apply nanoseconds precision for QueueInputStream timeout duration. #453. Fixes IO-790. Thanks to maxxedev, Gary Gregory, Bruno P. Kinoshita. ggregory
Fix Fix overflow for FileUtilsTest constants #456. Thanks to Marcono1234. ggregory
Fix Serialization is deprecated and will be removed in 3.0. Thanks to Gary Gregory. ggregory
Fix FileSystemUtils.performCommand(String[], int, Duration): Use Locale.getDefault() instead of ENGLISH. Thanks to Gary Gregory. ggregory
Add Add GitHub coverage.yml. Thanks to Gary Gregory. ggregory
Fix Add MemoryMappedFileInputStream #215. Fixes IO-726. Thanks to shollander, Gary Gregory. ggregory
Add Add BrokenReader.INSTANCE. Thanks to Gary Gregory. ggregory
Add Add UncheckedBufferedReader. Thanks to Gary Gregory. ggregory
Add Add UncheckedFilterReader. Thanks to Gary Gregory. ggregory
Add Add UncheckedFilterWriter. Thanks to Gary Gregory. ggregory
Add Add UncheckedFilterInputStream. Thanks to Gary Gregory. ggregory
Add Add UncheckedFilterOutputStream. Thanks to Gary Gregory. ggregory
Add Add BrokenInputStream.INSTANCE. Thanks to Gary Gregory. ggregory
Add Add ClosedInputStream.INSTANCE and deprecate CLOSED_INPUT_STREAM. Thanks to Gary Gregory. ggregory
Add Add ClosedReader.INSTANCE and deprecate CLOSED_READER. Thanks to Gary Gregory. ggregory
Add Add BrokenWriter.INSTANCE. Thanks to Gary Gregory. ggregory
Add Add ClosedOutputStream.INSTANCE and deprecate CLOSED_OUTPUT_STREAM. Thanks to Gary Gregory. ggregory
Add Add ClosedWriter.INSTANCE and deprecate CLOSED_WRITER. Thanks to Gary Gregory. ggregory
Add Add NullOutputStream.INSTANCE and deprecate NULL_OUTPUT_STREAM. Thanks to Gary Gregory. ggregory
Add Add NullPrintStream.INSTANCE and deprecate NULL_PRINT_STREAM. Thanks to Gary Gregory. ggregory
Add Add NullWriter.INSTANCE and deprecate NULL_WRITER. Thanks to Gary Gregory. ggregory
Add Add NullInputStream.INSTANCE. Thanks to Gary Gregory. ggregory
Add Add NullReader.INSTANCE. Thanks to Gary Gregory. ggregory
Add Add PathUtils.readString(Path, Charset). Thanks to Gary Gregory. ggregory
Add Add FileUtils.newOutputStream(File, boolean). Thanks to Gary Gregory. ggregory
Add Add PathUtils.newOutputStream(Path, boolean). Thanks to Gary Gregory. ggregory
Add Add UncheckedAppendable. Thanks to Gary Gregory. ggregory
Add Add and reuse UncheckedIOExceptions. Thanks to Gary Gregory. ggregory
Add Add PathUtils.getTempDirectory(). Thanks to Gary Gregory. ggregory
Add Add FileSystem.getNameSeparator(). Thanks to Gary Gregory. ggregory
Add Add FileSystem.normalizeSeparators(). Thanks to Gary Gregory. ggregory
Add Add PathUtils.isNewer(Path, FileTime, LinkOption...). Thanks to Gary Gregory. ggregory
Add Add PathUtils.isNewer(Path, Instant, LinkOption...). Thanks to Gary Gregory. ggregory
Add Add AgeFileFilter.AgeFileFilter(Instant). Add AgeFileFilter.AgeFileFilter(Instant, boolean). Thanks to Gary Gregory. ggregory
Add Add FileUtils.lastModifiedFileTime(File). Thanks to Gary Gregory. ggregory
Add Add FileTimes. Thanks to Gary Gregory. ggregory
Add Add PathUtils.waitFor(Path, Duration, LinkOption...). Thanks to Gary Gregory. ggregory
Add Add org.apache.commons.io.input.Tailer.getDelayDuration(). Thanks to Gary Gregory. ggregory
Add Add FileUtils.current(). Thanks to Gary Gregory. ggregory
Add Add and use PathUtils.setLastModifiedTime(Path) for more precision. Add and use PathUtils.setLastModifiedTime(Path, Path) for more precision. Thanks to Gary Gregory. ggregory
Add Add and use PathUtils.isNewer(Path, ChronoZonedDateTime, LinkOption...) for more precision. Add and use PathUtils.isNewer(Path, Path) for more precision. Add and use FileUtils.isNewer(File, FileTime) for more precision. Thanks to Gary Gregory. ggregory
Add Add and use PathUtils.isOlder(Path, FileTime, LinkOption...). Add and use PathUtils.isOlder(Path, Instant, LinkOption...). Add and use PathUtils.isOlder(Path, long, LinkOption...). Add and use PathUtils.isOlder(Path, Path). Thanks to Gary Gregory. ggregory
Add Add and use PathUtils.sizeOf(Path). Add and use PathUtils.sizeOfAsBigInteger(Path). Add and use PathUtils.sizeOfDirectory(Path). Add and use PathUtils.sizeOfDirectoryAsBigInteger(Path). Thanks to Gary Gregory. ggregory
Add Add and use IOCase.value(IOCase, IOCase). Thanks to Gary Gregory. ggregory
Add Add Tailer.Tailable interface to allow tailing of remote files for example using jCIFS. Thanks to Jon Freedman, Gary Gregory. jonfreedman
Add Add and use RandomAccessFileMode. Thanks to Gary Gregory. ggregory
Add Add PathUtils.writeString(Path, CharSequence, Charset, OpenOption...). Thanks to Gary Gregory. ggregory
Add Add PathUtiFiles.getFileAttributeView() shorthands: - PathUtils.getAclFileAttributeView(Path, LinkOption...) - PathUtils.getDosFileAttributeView(Path, LinkOption...) - PathUtils.getPosixFileAttributeView(Path, LinkOption...) Thanks to Gary Gregory. ggregory
Add Make commons-io a JPMS module by adding module-info.class. Fixes IO-747. mgrigorov
Add Add IOUtils method to copy output stream to input stream #281. Fixes IO-753. Thanks to SebastianDietrich, Gary Gregory. ggregory
Add Add PathUtils.isPosix(Path, LinkOption...). #290 Thanks to Gary Gregory. ggregory
Add Add PathUtils.readAttributes(Path, Class, LinkOption...). #290 Thanks to Gary Gregory. ggregory
Add Add IOExceptionList.checkEmpty(List, Object). Thanks to Gary Gregory. ggregory
Add Add IOBiConsumer, IOTriConsumer, IOComparator, IOUnaryOperator, IOBinaryOperator. Thanks to Gary Gregory. ggregory
Add Add and reuse IOConsumer forAll(*), forEach(*), and forEachIndexed(*). Thanks to Gary Gregory. ggregory
Add Add CharsetEncoders. Thanks to Gary Gregory. ggregory
Add Add CharsetDecoders. Thanks to Gary Gregory. ggregory
Add Add PathUtils.createParentDirectories(Path, LinkOption, FileAttribute...). Thanks to Gary Gregory. ggregory
Add Update FileEntry to use FileTime instead of long for file time stamps. Thanks to Gary Gregory. ggregory
Add Add more tests for IOUtils.contentEqualsIgnoreEOL #137. Fixes IO-680. Thanks to XenoAmess, sebbASF, Gary Gregory. ggregory
Add Reduce boilerplate through new UncheckedIO class and friends in org.apache.commons.io.function. Thanks to Gary Gregory. ggregory
Add Add PathUtils.touch(Path). Thanks to Gary Gregory. ggregory
Add Add FileSystem.getIllegalFileNameCodePoints(). Thanks to Gary Gregory. ggregory
Add Add FileUtils.isFileNewer(File, ChronoLocalDate, OffsetTime). Add FileUtils.isFileNewer(File, OffsetDateTime). Add FileUtils.isFileOlder(File, ChronoLocalDate, OffsetTime). Add FileUtils.isFileOlder(File, OffsetDateTime). Thanks to Isira Seneviratne, Gary Gregory. ggregory
Add Add IOBiConsumer.noop(). Thanks to Gary Gregory. ggregory
Add Add IOUtils.closeQuietly(Iterable<Closeable>). Add IOUtils.closeQuietly(Stream<Closeable>). Thanks to Gary Gregory. ggregory
Add Add Charsets.toCharset(Charset, Charset). Add Charsets.toCharset(String, Charset). Thanks to Gary Gregory. ggregory
Add Add XmlStreamWriter(OutputStream, Charset). Thanks to Gary Gregory. ggregory
Add Add PathUtils.getLastModifiedFileTime(*). Thanks to Gary Gregory. ggregory
Add Add IOBiFunction, IOTriFunction, IOQuadFunction, IOPredicate, IOIterator, IOSpliterator, IOBaseStream, IOStream, FilesUncheck. Thanks to Gary Gregory. ggregory
Add Add IOUtils.consume(Reader). Thanks to Gary Gregory. ggregory
Add Add IOSupplier.asSupplier(). Thanks to Gary Gregory. ggregory
Add Add IOFunction.asFunction(). Thanks to Gary Gregory. ggregory
Add Add IOConsumer.asConsumer(). Thanks to Gary Gregory. ggregory
Add Add TimestampedObserver.isClosed(). Thanks to Gary Gregory. ggregory
Add IOExceptionList implements Iterable. Thanks to Gary Gregory. ggregory
Add Add support for Appendable to HexDump #418. Fixes IO-784. Thanks to Fredrik Kjellberg, Gary Gregory. ggregory
Add Add and use ThreadUtils. Thanks to DaGeRe, Gary Gregory. ggregory
Add Add UnsynchronizedFilterInputStream. Fixes IO-786. Thanks to Gary Gregory. ggregory
Add Add UnsynchronizedBufferedInputStream. Fixes IO-786. Thanks to Gary Gregory, Benoit Tellier. ggregory
Add Add FileSystem.getBlockSize(). Thanks to Gary Gregory. ggregory
Add Add builders and avoid creating more constructors for all permutations of current options. Thanks to Gary Gregory. ggregory
Add Refactor using new Supplier API IOUtils.toString(IOSupplier<InputStream>, Charset[, IOSupplier<String>]). Thanks to Gary Gregory, maxxedev. ggregory
Add Refactor using new Supplier API org.apache.commons.io.file.PathUtils.copy(IOSupplier<InputStream>, Path, CopyOption...). Thanks to Gary Gregory, maxxedev. ggregory
Update Bump actions/cache from 2.1.6 to 3.0.10 #307, #337, #393. Thanks to Dependabot, Gary Gregory. kinow
Update Bump actions/checkout from 2.3.4 to 3.1.0 #286, #298, #330, #392. Thanks to Dependabot, Gary Gregory. ggregory
Update Bump actions/setup-java from 2 to 3.6.0 #346, #397. Thanks to Dependabot. kinow
Update Bump github/codeql-action from 1 to 2 #353. Thanks to Dependabot. kinow
Update Bump Maven Javadoc plugin from 3.2.0 to 3.4.1. Thanks to Dependabot, Gary Gregory. ggregory
Update 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. Thanks to Dependabot. ggregory
Update Bump spotbugs from 4.5.2 to 4.7.3 #313, #317, #357, #382, #398. Thanks to Gary Gregory, Dependabot. kinow
Update Bump JUnit from 5.7.2 to 5.8.2. Thanks to Gary Gregory. ggregory
Update Bump maven-enforcer-plugin from 3.0.0-M3 to 3.3.0 #255, #363, #431, #446. Thanks to Dependabot. ggregory
Update Bump checkstyle from 8.44 to 9.3 #256, #257, #266, #279, #292. #308. Thanks to Dependabot, Gary Gregory. ggregory
Update Bump junit-bom from 5.8.0-M1 to 5.9.1 #260, #271, #275, #309, #386. Thanks to Dependabot. ggregory
Update Bump mockito-inline from 3.11.2 to 4.11.0 #262, #264, #282, #306, #314, #331, #348, #359, #381, #399, #405, #414, #420. Thanks to Dependabot, Gary Gregory. ggregory
Update Bump jmh.version from 1.32 to 1.36 #258, #316, #342, #404. Thanks to Dependabot. ggregory
Update Bump moditect-maven-plugin from 1.0.0.RC1 to 1.0.0.Final #280, #439, #445. Thanks to Dependabot. kinow
Update Bump junit-pioneer from 1.4.2 to 1.9.1 #304. #335, #362, #402, #406, #409. Thanks to Dependabot, Gary Gregory. kinow
Update Bump japicmp-maven-plugin from 0.15.3 to 0.16.0. Thanks to Gary Gregory. ggregory
Update Bump commons-parent from 52 to 57 #388, #415, #421, #184. Thanks to Gary Gregory, Dependabot. ggregory
Update Bump jacoco-maven-plugin from 0.8.7 to 0.8.8. Thanks to Gary Gregory. ggregory
Update Bump maven-antrun-plugin from 3.0.0 to 3.1.0 #354. Thanks to Dependabot. ggregory
Update Bump commons.surefire.version 3.0.0-M5 to 3.0.0-M7. Thanks to Gary Gregory. ggregory
Update Bump PMD from 6.44.0 to 6.52.0. Thanks to Gary Gregory. ggregory
Update Bump maven-pmd-plugin from 3.16.0 to 3.19.0. Thanks to Gary Gregory. ggregory
Update Bump apache-rat from 0.13 to 0.14. Thanks to Gary Gregory. ggregory
Update Bump exec-maven-plugin from 3.0.0 to 3.1.0 #369. Thanks to Dependabot. kinow
Update Bump maven-checkstyle-plugin from 3.1.2 to 3.2.0 #376. Thanks to Dependabot. kinow
Update Bump apache-rat-plugin from 0.14 to 0.15 #387. Thanks to Dependabot. kinow
Update Bump default buffer size for CharSequenceInputStream to IOUtils#DEFAULT_BUFFER_SIZE. Thanks to Gary Gregory. ggregory
Update Bump default buffer size for ChunkedOutputStream to IOUtils#DEFAULT_BUFFER_SIZE. Thanks to Gary Gregory. ggregory
Update Bump default buffer size for ChunkedWriter to IOUtils#DEFAULT_BUFFER_SIZE. Thanks to Gary Gregory. ggregory
Update Bump default buffer size for ReaderInputStream to IOUtils#DEFAULT_BUFFER_SIZE. Thanks to Gary Gregory. ggregory
Update Bump default buffer size for WriterOutputStream to IOUtils#DEFAULT_BUFFER_SIZE. Thanks to Gary Gregory. ggregory

Release 2.11.0 – 2021-07-09

Type Changes By
Fix FileUtils.listFiles does not list matching files if File parameter is a symbolic link. Fixes IO-741. Thanks to Zach Sherman. ggregory
Fix FileUtils#deleteDirectory(File) exception Javadoc inaccurate update #245. Fixes IO-724. Thanks to liran2000. ggregory
Fix Minor changes #243. Thanks to Arturo Bernal. ggregory
Fix Replace construction of FileInputStream and FileOutputStream objects with Files NIO APIs. #221. Thanks to Arturo Bernal. ggregory
Fix Fix IndexOutOfBoundsException in IOExceptionList constructors. Thanks to Gary Gregory. ggregory
Fix Remove IOException from the method signatures that no longer throw IOException. This maintains binary compatibility but not source compatibility. - FilenameUtils directoryContains(String, String) - BoundedReader BoundedReader(java.io.Reader, int) - IOUtils lineIterator(java.io.InputStream, Charset) lineIterator(java.io.InputStream, String) toByteArray(String) toInputStream(CharSequence, String) toInputStream(String, String) toString(byte[]) toString(byte[], String) Thanks to Gary Gregory. ggregory
Update Add SymbolicLinkFileFilter. Thanks to Gary Gregory. ggregory
Update Add test to make sure the setter of AndFileFilter works correctly #244. Thanks to trncate. ggregory
Update Add XmlStreamReader(Path). Thanks to Gary Gregory. ggregory
Update Bump mockito-inline from 3.11.0 to 3.11.2 #247. Thanks to Dependabot. ggregory
Update Bump jmh.version from 1.27 to 1.32 #237. Thanks to Dependabot. ggregory

Release 2.10.0 – 2021-06-10

Type Changes By
Fix RegexFileFilter uses the path and file name instead of just the file name. Fixes IO-733. Thanks to Jim Sellers, Gary Gregory. ggregory
Fix The OSGi manifest now contains sun.* import packages #239. Fixes IO-734. Thanks to Eric Norman. ggregory
Fix Sanitize double slash after prefix #79. Fixes IO-585. Thanks to Adam McClenaghan. ggregory
Add Add and use RegexFileFilter.toString(). Thanks to Gary Gregory. ggregory
Add Add and use RegexFileFilter.RegexFileFilter(Pattern, Function<Path>, String>) Thanks to Gary Gregory. ggregory
Add Add and use IOCase.isCaseSensitive(IOCase). Thanks to Gary Gregory. ggregory
Update Bump actions/cache from 2.1.5 to 2.1.6 #238. Thanks to Dependabot. ggregory
Update Bump junit-pioneer from 1.4.1 to 1.4.2 #240. Thanks to Dependabot. ggregory
Update Bump checkstyle from 8.42 to 8.44 #241, #248. Thanks to Dependabot. ggregory
Update Bump mockito-inline from 3.10.0 to 3.11.0 #242. Thanks to Dependabot. ggregory

Release 2.9.0 – 2021-05-22

Type Changes By
Fix IOUtils.toByteArray(InputStream) Javadoc does not match code. Fixes IO-686. Thanks to Alan Moffat, Gary Gregory. ggregory
Fix FileUtils: Remove Instant->ZonedDateTime->Instant round-trip. Fixes IO-689. Thanks to Uwe Schindler. aherbert
Fix Make FilenameUtils.equals() not throw an exception #154. Thanks to Michael Ernst, Gary Gregory. ggregory
Fix Un-deprecate IOUtils.closeQuietly() methods. Thanks to Jan Peter Stotz, Bernd Eckenfels, Gary Gregory. ggregory
Fix FileUtils#copyDirectory(File, File, FileFilter, preserveFileDate) clean up #163. Thanks to Michiel Kalkman. ggregory
Fix AccumulatorPathVisitor does not track directories properly. Thanks to Gary Gregory. ggregory
Fix FileUtils.iterateFiles runs out of memory when executed for a directory with large number of files. Re-implement FileUtils' iterateFiles(), iterateFilesAndDirs(), listFiles(), listFilesAndDirs() to use NIO file tree walking instead of IO file listings to avoid memory consumption issues on large file trees. Fixes IO-597. Thanks to Gary Gregory, Arvind, Rob Spoor. ggregory
Fix FileUtils.forceDelete(File) actually forces deletion of read-only files as it did in version 2.6. Thanks to Gary Gregory. ggregory
Fix PathUtils.deleteFile() no longer throws a NoSuchFileException when applied on a symbolic link pointing to a file that doesn't exist. Fixes IO-692. Thanks to Matthew Rooney, Emmanuel Bourg. ebourg
Fix Behavior change in FileUtils.copyDirectory() file last modified timestamp preservation. Match Javadoc to code. Fixes IO-694. Thanks to Tan Yee Fan, Gary Gregory. ggregory
Fix Fix getPrefixLength method for Linux filename #179. Fixes IO-600. Thanks to Abhyankar Chaubey, Gary Gregory. ggregory
Fix Wrong logging in FileUtils.setLastModified. Fixes IO-699. Thanks to tza, Gary Gregory. ggregory
Fix IOUtils.toByteArray(InputStream) Javadoc does not match code. Fixes IO-686. Thanks to Alan Moffat, Sebb, Gary Gregory. ggregory
Fix CopyUtils deprecation message gives wrong version. Fixes IO-688. Thanks to Michael Ernst, Gary Gregory. ggregory
Fix Make PathUtils.setReadOnly deal with LinuxDosFileAttributeView #186. Fixes IO-701. Thanks to Gary Gregory. ggregory
Fix FileUtils.forceDelete does not delete invalid links. #187. Fixes IO-702. Thanks to Boris Unckel, Gary Gregory. ggregory
Fix IOUtils.toByteArray(null) no longer throws a NullPointerException. Fixes IO-690. Thanks to Chris Heisterkamp, Gary Gregory. ggregory
Fix MarkShieldInputStream#reset should throw UnsupportedOperationException. Fixes IO-705. Thanks to Hao Zhong, Gary Gregory. ggregory
Fix LockableFileWriter.close() should fail when the lock file cannot be deleted. Fixes IO-705. Thanks to Hao Zhong, Gary Gregory. ggregory
Fix Fix infinite loops in ObservableInputStream read(*) when an exception is caught but not re-thrown. Fixes IO-705. Thanks to Hao Zhong, Gary Gregory. ggregory
Fix Fixed error of copying directories between different file systems #203. Fixes IO-719. Thanks to Andrew Shcheglov, Gary Gregory. ggregory
Fix Fix Typos in JavaDoc, Comments and Tests #201. Thanks to Felix Rilling. ggregory
Fix FileUtils.checksumCRC32 and FileUtils.checksum are not thread safe. Fixes IO-718. Thanks to Robert Cooper, Gary Gregory. ggregory
Fix Fix error about usage of DirectBuffer in JRE 16/17 #205. Fixes IO-720. Thanks to XenoAmess. ggregory
Fix Prevent infinite loop with AbstractCharacterFilterReader if EOF is filtered out #226. Thanks to Rob Spoor, Gary Gregory. ggregory
Fix Check for long streams in IOUtils.toByteArray #175. Fixes IO-429. Thanks to Ivan Leskin, Ivan Leskin. ggregory
Add Add FileSystemProviders class. Thanks to Gary Gregory. ggregory
Add Let org.apache.commons.io.filefilter classes work with java.nio.file.Files.walk* APIs. Thanks to Gary Gregory. ggregory
Add Let org.apache.commons.io.filefilter classes work with java.nio.file.Files#newDirectoryStream(Path, DirectoryStream.Filter). Thanks to Gary Gregory. ggregory
Add Add and adapt ReadAheadInputStream and BufferedFileChannelInputStream from Apache Spark. Fixes IO-510. Thanks to Gary Gregory, Apache Spark, David Mollitor. ggregory
Add Add PathUtils.createParentDirectories(Path, FileAttribute...). Thanks to Gary Gregory. ggregory
Add Add factory methods to CloseShieldInputStream, CloseShieldReader, CloseShieldOutputStream, CloseShieldWriter, #173. Thanks to Rob Spoor, Gary Gregory. ggregory
Add Add QueueInputStream and QueueOutputStream as simpler alternatives to PipedInputStream and PipedOutputStream #171. Thanks to maxxedev, Gary Gregory. ggregory
Add Add StandardLineSeparator. Thanks to Gary Gregory. ggregory
Add Replace magic numbers with constants with the new IOUtils.CR and LF. Thanks to Gary Gregory. ggregory
Add Add FileSystem#supportsDriveLetter(). Thanks to Gary Gregory. ggregory
Add Add FileUtils.delete(File). Thanks to Gary Gregory. ggregory
Add Add FileUtils.moveFile(File, File, CopyOption...) #185. Fixes IO-700. Thanks to Gary Gregory. ggregory
Add Add FileUtils.isEmptyDirectory(File). Fixes IO-700. Thanks to Gary Gregory. ggregory
Add Add FileUtils.lastModified[Unchecked](File) to workaround https://bugs.openjdk.java.net/browse/JDK-8177809. Thanks to Gary Gregory. ggregory
Add Add null safe variants of isDirectory and isRegularFile. Fixes IO-709. Thanks to Boris Unckel, Gary Gregory. ggregory
Add Add and use IOExceptionList(String, List). Thanks to Gary Gregory. ggregory
Add Add and use ObservableInputStream.ObservableInputStream(InputStream, Observer...). Thanks to Gary Gregory. ggregory
Add Make ObservableInputStream.getObservers() public. Thanks to Gary Gregory. ggregory
Add Add TimestampedObserver. Fixes IO-706. Thanks to Gary Gregory. ggregory
Add Add and use IOUtils.byteArray(*). Thanks to Gary Gregory. ggregory
Add Make public and reuse IOUtils.EMPTY_BYTE_ARRAY. Thanks to Gary Gregory. ggregory
Add Add IOUtils.copy(URL, File). Thanks to Gary Gregory. ggregory
Add Add copy(URL, OutputStream). Thanks to Gary Gregory. ggregory
Add Add DeferredFileOutputStream.toInputStream() #206. Fixes IO-651. Thanks to jmark109, Gary Gregory. ggregory
Add Add CharacterSetFilterReader.CharacterSetFilterReader(Reader, Integer...). Thanks to Gary Gregory. ggregory
Add Add AbstractCharacterFilterReader(Reader, IntPredicate), #227. Add CharacterFilterReader(Reader, IntPredicate), #227. Add CharacterFilterReaderIntPredicateTest, #227. Thanks to Rob Spoor, Gary Gregory. ggregory
Add Add IOConsumer.noop(). Thanks to Gary Gregory. ggregory
Add Add constructor ThresholdingOutputStream(int, IOConsumer, IOFunction) and make the class concrete. Thanks to Gary Gregory. ggregory
Add Add constructor accepting collection of file alteration observers #236. Thanks to nstdspace, Gary Gregory. ggregory
Update Update junit-jupiter from 5.6.2 to 5.7.0 #153. Thanks to Dependabot. ggregory
Update Update mockito-core from 3.5.9 to 3.10.0, #152, #155, #157, #166, #167, #169, #182. Thanks to Dependabot. ggregory
Update Bump mockito-inline from 3.7.0 to 3.10.0 #188, #207, #230. Thanks to Dependabot. ggregory
Update Update commons.jacoco.version 0.8.5 to 0.8.7, fixes Java 15 builds and up. Thanks to Gary Gregory. ggregory
Update Update spotbugs from 4.1.2 to 4.5.0, #158, #164, #165, #180, #199, #213, #224, #302. Thanks to Dependabot. ggregory
Update Bump spotbugs-maven-plugin from 4.0.4 to 4.2.3, #161, #172, #223. Thanks to Dependabot. ggregory
Update Update org.junit-pioneer:junit-pioneer 0.9.0 -> 1.4,1, #159, #162, #170, #189, #191, #210, #229. Thanks to Gary Gregory, Dependabot. ggregory
Update Update actions/checkout from v2.3.2 to v2.3.4, #156, #168. Thanks to Dependabot. ggregory
Update Bump actions/setup-java from v1.4.2 to v2 #160. Thanks to Dependabot, Gary Gregory. ggregory
Update Update maven-surefire-plugin from 2.22.2 to 3.0.0-M5. Thanks to Gary Gregory. ggregory
Update Minor improvements, #176, 177, #190. Thanks to Arturo Bernal. ggregory
Update Update commons.japicmp.version 0.14.4 -> 0.15.3. Thanks to Gary Gregory. ggregory
Update Tiny performance improvement in FileUtils#moveDirectoryToDirectory() #174. Thanks to Michiel Kalkman. ggregory
Update Bump checkstyle from 8.38 to 8.42 #689, #209, #225. Thanks to Dependabot. ggregory
Update Bump maven-checkstyle-plugin from 3.1.1 to 3.1.2 #198. Thanks to Dependabot. ggregory
Update Bump jimfs from 1.1 to 1.2 #183. Thanks to Dependabot. ggregory
Update Improve performance of IOUtils.contentEquals(InputStream, InputStream). Thanks to XenoAmess, Gary Gregory. ggregory
Update Improve performance of IOUtils.contentEquals(Reader, Reader). Thanks to XenoAmess, Gary Gregory. ggregory
Update Bump actions/cache from v2 to v2.1.5 #202, #228. Thanks to Dependabot. ggregory
Update Bump junit-bom from 5.7.0 to 5.7.2 #200, #232. Thanks to Dependabot. ggregory
Update Update from Apache Commons Lang 3.11 to 3.12.0. Thanks to Gary Gregory. ggregory
Update Minor improvements #233. Thanks to Arturo Bernal. ggregory
Update Simplify Assertions in tests #234. Thanks to Arturo Bernal. ggregory

Release 2.8.0 – 2020-09-05

Type Changes By
Add Add org.apache.commons.io.input.CircularInputStream. Thanks to Gary Gregory. ggregory
Add Add org.apache.commons.io.file.PathUtils.cleanDirectory(Path, FileVisitOption...). Thanks to Gary Gregory. ggregory
Add Add org.apache.commons.io.file.PathUtils.deleteDirectory(Path, FileVisitOption...). Thanks to Gary Gregory. ggregory
Add Add NullAppendable. Thanks to Gary Gregory. ggregory
Fix CharSequenceReader.skip should return 0 instead of EOF on stream end #123. Thanks to Rob Spoor, Jochen Wiedmann. ggregory
Fix Implement CharSequenceReader.ready() #122. Thanks to Rob Spoor. ggregory
Fix Fix code smells; fix typos #115. Fixes IO-669. Thanks to XenoAmess, Gary Gregory. ggregory
Fix Add caching for required charsets #120. Thanks to Jerome Wolff, Gary Gregory. ggregory
Fix Make some simplifications #121. Fixes IO-673. Thanks to Jerome Wolff. ggregory
Fix InfiniteCircularInputStream is not infinite if its input buffer contains -1. Fixes IO-674. Thanks to Gary Gregory. ggregory
Fix InfiniteCircularInputStream throws a divide-by-zero exception when reading if its input buffer is size 0. Fixes IO-675. Thanks to Gary Gregory. ggregory
Fix FileSystem.getCurrent() does not return the correct enum. Fixes IO-677. Thanks to Gary Gregory. ggregory
Fix input.AbstractCharacterFilterReader passes count of chars read #132. Fixes IO-679. Thanks to proneel. ggregory
Add Add PathUtils.getAclEntryList(Path). Thanks to Gary Gregory. ggregory
Add Null-guard IOUtils.close(Closeable, IOConsumer). Thanks to Gary Gregory. ggregory
Add Add ReversedLinesFileReader.readLines(int). Thanks to Gary Gregory. ggregory
Add Add ReversedLinesFileReader.toString(int). Thanks to Gary Gregory. ggregory
Add Add PathUtils.delete(Path, DeleteOption...). Add PathUtils.deleteDirectory(Path, DeleteOption...). Add PathUtils.deleteFile(Path, DeleteOption...). Add PathUtils.setReadOnly(Path, boolean, LinkOption...). Add CleaningPathVisitor.CleaningPathVisitor(PathCounters, DeleteOption[], String...). Add DeletingPathVisitor.DeletingPathVisitor(PathCounters, DeleteOption[], String...). Fixes IO-684. Thanks to Gary Gregory, Robin Jansohn. ggregory
Fix CircularBufferInputStream.read() fails to convert byte to unsigned int. Fixes IO-683. sebb
Fix Fix SpotBugs issues in org.apache.commons.io.FileUtils. Thanks to Gary Gregory. ggregory
Add Add RandomAccessFileInputStream. Thanks to Gary Gregory. ggregory
Add IOUtils.close(Closeable) should allow a list of closeables. Fixes IO-681. sebb
Fix Copying a File sets last modified date to 01 January 1970. Fixes IO-672. sebb
Add Add IOUtils.consume(InputStream). Thanks to Gary Gregory. ggregory
Add Add isFileNewer() and isFileOlder() methods that support the Java 8 Date/Time API. #124. Fixes IO-676. Thanks to Isira Seneviratne, Gary Gregory. ggregory
Fix Prevent NullPointerException in ReversedLinesFileReader constructors #117. Fixes IO-676. Thanks to Michael Ernst, Gary Gregory. ggregory
Add Add a MarkShieldInputStream #119. Thanks to Adam Retter, Gary Gregory. ggregory
Add Deprecate IOUtils.LINE_SEPARATOR in favor of Java 7's System.lineSeparator(). Thanks to Gary Gregory. ggregory
Update Replace FindBugs with SpotBugs. Thanks to Gary Gregory. ggregory
Update maven-checkstyle-plugin 3.1.0 -> 3.1.1. Thanks to Gary Gregory. ggregory
Update Update tests from org.apache.commons:commons-lang3 3.10 to 3.11. Thanks to Gary Gregory. ggregory
Update Update commons-parent from 50 to 51 #129. Thanks to Gary Gregory. ggregory
Update Update actions/checkout from v1 to v2.3.1 #126. Thanks to Gary Gregory. ggregory
Update Update junit-pioneer from 0.6.0 to 0.9.0, #127, #135, #138. Thanks to Gary Gregory. ggregory
Update Update mockito-core from 3.3.3 to 3.5.9 #128, #133, #145, #149, #151. Thanks to Gary Gregory. ggregory
Update Update spotbugs from 4.0.6 to 4.6.0 #134, #332. Thanks to Dependabot. ggregory
Update Update actions/checkout from v2.3.1 to v2.3.2 #140. Thanks to Dependabot. ggregory
Update Update actions/setup-java from v1.4.0 to v1.4.2 #141, #148. Thanks to Dependabot. ggregory
Update Update com.github.siom79.japicmp:japicmp-maven-plugin 0.14.3 -> 0.14.4. Thanks to Gary Gregory. ggregory

Release 2.7 – 2020-05-24

Type Changes By
Fix Some tests fail if the base path contains a space. Fixes IO-589. sebb
Add Adding the CircularBufferInputStream, and the PeekableInputStream. jochen
Fix Make methods in ObservableInputStream.Observer public. Fixes IO-582. Thanks to Bruno Palos. jochen
Fix Thread bug in FileAlterationMonitor#stop(int). Fixes IO-535. Thanks to Svetlin Zarev, Anthony Raymond. pschumacher
Add Add org.apache.commons.io.FilenameUtils.isIllegalWindowsFileName(char). Fixes IO-553. ggregory
Fix Perform locale independent upper case conversions. Fixes IO-557. Thanks to luccioman. pschumacher
Fix Missing Javadoc in FilenameUtils causing Travis-CI build to fail. Fixes IO-570. Thanks to Pranet Verma. ggregory
Fix Remove redundant isDirectory() check in org.apache.commons.io.FileUtils.listFilesAndDirs(File, IOFileFilter, IOFileFilter). Fixes IO-571. Thanks to pranet. ggregory
Update Refactor duplicate code in org.apache.commons.io.FileUtils. Fixes IO-572. Thanks to Pranet Verma. ggregory
Add Add readers to filter out given characters: CharacterSetFilterReader and CharacterFilterReader. Fixes IO-577. Thanks to Gary Gregory. ggregory
Fix FilenameUtils.normalize now verifies hostname syntax in UNC path. Fixes IO-559.
Update Update org.apache.commons.io.FilenameUtils.isExtension(String, String[]) to use var args. Fixes IO-580. ggregory
Fix FileUtils.copyToFile(InputStream source, File destination) should not close input stream. Fixes IO-554. Thanks to Michele Mariotti. ggregory
Add Add IOUtils copy methods with java.lang.Appendable as the target. Fixes IO-594. Thanks to Gary Gregory. ggregory
Fix FileUtils.doCopyFile(File, File, boolean) can throw ClosedByInterruptException. Fixes IO-604. Thanks to Gary Gregory. ggregory
Add Add class CanExecuteFileFilter. Fixes IO-605. Thanks to Gary Gregory. ggregory
Update Make array declaration in ThresholdingOutputStream consistent with other array declarations in the library #77. Fixes IO-701. Thanks to Raymond Tan. ggregory
Add Support java.nio.Path and non-default file systems for ReversedLinesFileReader (#62). Fixes IO-578. Thanks to Mark Chesney. ggregory
Add Add a convenience NullPrintStream. Fixes IO-608. Thanks to Gary Gregory. ggregory
Update Update from Java 7 to Java 8. Fixes IO-607. Thanks to Gary Gregory. ggregory
Update Remove throws IOException in method isSymlink() #80. Fixes IO-610. Thanks to Sebastian. ggregory
Add Add class TeeReader. Fixes IO-612. Thanks to Rob Spoor, Gary Gregory. ggregory
Add Add classes ClosedReader and CloseShieldReader. #84. Fixes IO-613. Thanks to Rob Spoor, Gary Gregory. ggregory
Add Add classes TaggedWriter, ClosedWriter and BrokenWriter. #86. Fixes IO-614. Thanks to Rob Spoor. ggregory
Add Add classes TeeWriter, FilterCollectionWriter, ProxyCollectionWriter, IOExceptionList, IOIndexedException. Fixes IO-615. Thanks to Gary Gregory, Rob Spoor. ggregory
Add Add class AppendableWriter. #87. Fixes IO-616. Thanks to Rob Spoor. ggregory
Add Add class CloseShieldWriter. #83. Fixes IO-617. Thanks to Rob Spoor, Gary Gregory. ggregory
Add Add classes Added TaggedReader, ClosedReader and BrokenReader. #85. Fixes IO-618. Thanks to Rob Spoor. ggregory
Add Support sub sequences in CharSequenceReader. #91. Fixes IO-619. Thanks to Rob Spoor. ggregory
Fix Corrected misleading exception message for FileUtils.copyDirectoryToDirectory. Fixes IO-625. Thanks to Mikko Maunu. ggregory
Fix A mistake in the FilenameUtils.concat()'s Javadoc about an absolute path. Fixes IO-626. Thanks to Yuji Konishi. ggregory
Update Migration to JUnit Jupiter #97. Fixes IO-628. Thanks to Allon Mureinik. ggregory
Update Deprecate org.apache.commons.io.output.NullOutputStream.NullOutputStream() in favor of org.apache.commons.io.output.NullOutputStream.NULL_OUTPUT_STREAM. Fixes IO-630. Thanks to Gary Gregory. ggregory
Add Add a CountingFileVisitor (as the basis for a forthcoming DeletingFileVisitor). Fixes IO-631. Thanks to Gary Gregory. ggregory
Add Add PathUtils for operations on NIO Path. Fixes IO-632. Thanks to Gary Gregory. ggregory
Add Add DeletingFileVisitor. Fixes IO-633. Thanks to Gary Gregory. ggregory
Update FileUtils#forceDelete should use Files#delete rather than File#delete so exception messages includes reason for failure. Fixes IO-629. Thanks to Ian Springer, Ian Springer, Gary Gregory. ggregory
Update Make getCause synchronized and use a Deque instead of a Stack #64. Fixes IO-634. Thanks to Václav Haisman, Bruno P. Kinoshita, Gary Gregory. ggregory
Add Add org.apache.commons.io.IOUtils.close(Closeable). Fixes IO-635. Thanks to Gary Gregory. ggregory
Add Add and reuse org.apache.commons.io.IOUtils.closeQuitely(Closeable, Consumer<IOException>). Add and reuse org.apache.commons.io.IOUtils.close(Closeable, IOConsumer<IOException>). Fixes IO-636. Thanks to Gary Gregory. ggregory
Fix NPE in org.apache.commons.io.IOUtils.contentEquals(InputStream, InputStream) when only one input is null. Fixes IO-640. Thanks to Gary Gregory. ggregory
Fix NPE in org.apache.commons.io.IOUtils.contentEquals(Reader, Reader) when only one input is null. Fixes IO-641. Thanks to Gary Gregory. ggregory
Fix NPE in org.apache.commons.io.IOUtils.contentEqualsIgnoreEOL(Reader, Reader) when only one input is null. Fixes IO-643. Thanks to Gary Gregory. ggregory
Fix NPE in org.apache.commons.io.FileUtils.contentEqualsIgnoreEOL(File, File) when only one input is null. Fixes IO-644. Thanks to Gary Gregory. ggregory
Add Add org.apache.commons.io.file.PathUtils.fileContentEquals(Path, Path, OpenOption...). Fixes IO-645. Thanks to Gary Gregory. ggregory
Add Add a SequenceReader similar to java.io.SequenceInputStream. Fixes IO-458. Thanks to Gary Gregory, Joshua Gitlin. ggregory
Add Implement directory content equality. 100#. Fixes IO-648. Thanks to Gary Gregory. ggregory
Update Update tests from Apache Commons Lang 3.9 to 3.10. Thanks to Gary Gregory. ggregory
Update Update tests org.junit-pioneer:junit-pioneer 0.3.0 -> 0.6.0. Thanks to Gary Gregory. ggregory
Update Update tests org.junit.jupiter:junit-jupiter 5.5.2 -> 5.6.2. Thanks to Gary Gregory. ggregory
Update Update tests org.mockito:mockito-core 3.0.0 -> 3.3.3. Thanks to Gary Gregory. ggregory
Add Refactor ByteArrayOutputStream into synchronized and unsynchronized versions #108. Fixes IO-648. Thanks to Adam Retter, Alex Herbert, Gary Gregory. ggregory
Add Refactor ByteArrayOutputStream into synchronized and unsynchronized versions #108. Fixes IO-662. Thanks to Adam Retter, Gary Gregory. ggregory
Fix org.apache.commons.io.FileUtils.copyURLToFile(*) open but do not close streams. Fixes IO-664. Thanks to Gary Gregory. ggregory
Update Normalize internal buffers to 8192 bytes. Fixes IO-666. Thanks to Gary Gregory. ggregory
Update Ensure that passing a null InputStream results in NPE with tests #112. Fixes IO-665. Thanks to Otto Fowler, Gary Gregory. ggregory
Update commons.jacoco.version 0.8.4 -> 0.8.5. Thanks to Gary Gregory. ggregory
Update com.github.siom79.japicmp:japicmp-maven-plugin 0.14.1 -> 0.14.3. Thanks to Gary Gregory. ggregory
Update Add functional interfaces IOFunction and IOSupplier #110. Fixes IO-667. Thanks to Adam Retter, Gary Gregory. ggregory
Update Support sub sequences in CharSequenceReader #91. Thanks to Rob Spoor, Gary Gregory. ggregory
Update Remove deprecated sudo setting. #113. Thanks to dengliming. ggregory

Release 2.6 – 2017-10-15

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

Release 2.5 – 2016-04-22

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

Release 2.4 – 2012-06-12

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

Release 2.3 – 2012-April-10

Type Changes By
Add Add and use class Charsets. Fixes IO-322. Thanks to ggregory. ggregory
Add ByteOrderMark UTF_32LE is incorrect. Fixes IO-321. Thanks to ggregory. ggregory
Add Add Charset sister APIs to method that take a String charset name. Fixes IO-318. Thanks to ggregory. ggregory

Release 2.2 – 2012-March-26

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

Release 2.1 – 2011-Sep-28

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

Release 2.0.1 – 2010-Dec-26

Type Changes By
Update TODO: Convert RELEASE-NOTES.txt from 2.0.1?

Release 2.0 – 2010-Oct-18

Type Changes By
Update TODO: Convert RELEASE-NOTES.txt from 2.0?

Release 1.4 – 2008-Jan-21

Type Changes By
Update TODO: Convert RELEASE-NOTES.txt from 1.4?

Release 1.3.2 – 2007-Jul-02

Type Changes By
Fix Some tests, which are implicitly assuming a Unix-like file system, are now skipped on Windows. Fixes IO-115. jochen
Fix Created the FileCleaningTracker, basically a non-static version of the FileCleaner, which can be controlled by the user. Fixes IO-116. jochen
Fix EndianUtils - both readSwappedUnsignedInteger(...) methods could return negative numbers due to int/long casting. Fixes IO-117. Thanks to Hiroshi Ikeda. bayard