Apache Commons logo Commons IO

Release Notes

Release History

Version Date Description
2.7 tba tba
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.7 – tba

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.Obsever 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

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 for ever 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 behaviour; 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 failiure. 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