Author: bimargulies Date: Fri Apr 22 00:29:31 2016 New Revision: 13344 Log: Update release notes.
Modified: release/commons/io/RELEASE-NOTES.txt Modified: release/commons/io/RELEASE-NOTES.txt ============================================================================== --- release/commons/io/RELEASE-NOTES.txt (original) +++ release/commons/io/RELEASE-NOTES.txt Fri Apr 22 00:29:31 2016 @@ -1,873 +1,86 @@ -Apache Commons IO -Version 2.4 -Release Notes - -INTRODUCTION: - -Commons IO is a package of Java utility classes like java.io. -Classes in this package are considered to be so standard and of such high -reuse as to justify existence in java.io. - -The Commons IO library contains utility classes, stream implementations, file filters, -file comparators, endian transformation classes, and much more. - -============================================================================== -Apache Commons IO Version 2.4 -============================================================================== -New features and bug fixes. - -Changes in this version include: - -New features: -o IO-269: Tailer locks file from deletion/rename on Windows. Thanks to sebb. -o IO-333: Export OSGi packages at version 1.x in addition to 2.x. Thanks to fmeschbe. -o IO-320: Add XmlStreamReader support for UTF-32. Thanks to ggregory. -o IO-331: BOMInputStream wrongly detects UTF-32LE_BOM files as UTF-16LE_BOM files in method getBOM(). Thanks to ggregory. -o IO-327: Add byteCountToDisplaySize(BigInteger). Thanks to ggregory. -o IO-326: Add new FileUtils.sizeOf[Directory] APIs to return BigInteger. Thanks to ggregory, kinow. -o IO-325: Add IOUtils.toByteArray methods to work with URL and URI. Thanks to raviprak. -o IO-324: Add missing Charset sister APIs to method that take a String charset name. Thanks to raviprak. - -Fixed Bugs: -o IO-336: Yottabyte (YB) incorrectly defined in FileUtils. Thanks to rleavelle. -o IO-279: Tailer erroneously considers file as new. Thanks to Sergio Bossa, Chris Baron. -o IO-335: Tailer#readLines - incorrect CR handling. -o IO-334: FileUtils.toURLs throws NPE for null parameter; document the behavior. -o IO-332: Improve tailer's reading performance. Thanks to liangly. -o IO-279: Improve Tailer performance with buffered reads (see IO-332). -o IO-329: FileUtils.writeLines uses unbuffered IO. Thanks to tivv. -o IO-319: FileUtils.sizeOfDirectory follows symbolic links. Thanks to raviprak. - - -Compatibility with 2.3: -Binary compatible: Yes. -Source compatible: Yes. -Semantic compatible: Yes. - -Compatibility with 2.2 and 1.4: -Binary compatible: Yes. -Source compatible: No, see the rare case in https://issues.apache.org/jira/browse/IO-318. -Semantic compatible: No, see the rare case in https://issues.apache.org/jira/browse/IO-318. - -Commons IO 2.4 requires JDK 1.6 or later. -Commons IO 2.3 requires JDK 1.6 or later. -Commons IO 2.2 requires JDK 1.5 or later. -Commons IO 1.4 requires JDK 1.3 or later. - -============================================================================== -Apache Commons IO Version 2.3 -============================================================================== - -Changes in this version include: - -New features: -o IO-322: Add and use class Charsets. Thanks to ggregory. -o IO-321: ByteOrderMark UTF_32LE is incorrect. Thanks to ggregory. -o IO-318: Add Charset sister APIs to method that take a String charset name. Thanks to ggregory. - -Compatibility with 2.2 and 1.4: -Binary compatible: Yes. -Source compatible: No, see the rare case in https://issues.apache.org/jira/browse/IO-318. -Semantic compatible: No, see the rare case in https://issues.apache.org/jira/browse/IO-318. - -Commons IO 2.3 requires JDK 1.6 or later. -Commons IO 2.2 requires JDK 1.5 or later. -Commons IO 1.4 requires JDK 1.3 or later. - -============================================================================== -Apache Commons IO Version 2.2 -============================================================================== - -Changes in this version include: - -New features: -o Add IOUTils.toBufferedReader(Reader) Issue: IO-313. Thanks to ggregory. -o Allow applications to provide buffer (or size) for copyLarge methods. Issue: IO-308. Thanks to Manoj Mokashi. -o New copyLarge() method in IOUtils that takes additional offset, length arguments Issue: IO-305. Thanks to Manoj Mokashi. -o Use terabyte (TB), petabyte (PB) and exabyte (EB) in FileUtils.byteCountToDisplaySize(long size) Issue: IO-287. Thanks to Ron Kuris, Gary Gregory. -o FileUtils.listFiles() doesn't return directories Issue: IO-173. Thanks to Marcos VinÃcius da Silva. -o CharSequenceInputStream to efficiently stream content of a CharSequence Issue: IO-297. Thanks to Oleg Kalnichevski. -o The second constructor of Tailer class does not pass 'delay' to the third one Issue: IO-304. Thanks to liangly. -o TeeOutputStream does not call branch.close() when main.close() throws an exception Issue: IO-303. Thanks to fabian.barney. -o ArrayIndexOutOfBoundsException in BOMInputStream when reading a file without BOM multiple times Issue: IO-302. Thanks to jsteuerwald, detinho. -o Add IOUtils.closeQuietly(Selector) necessary Issue: IO-301. Thanks to kaykay.unique. -o IOUtils.closeQuietly() should take a ServerSocket as a parameter Issue: IO-292. Thanks to sebb. -o Add read/readFully methods to IOUtils Issue: IO-290. Thanks to sebb. -o Supply a ReversedLinesFileReader Issue: IO-288. Thanks to Georg Henzler. -o Add new function FileUtils.directoryContains. Issue: IO-291. Thanks to ggregory. -o FileUtils.contentEquals and IOUtils.contentEquals - Add option to ignore "line endings" - Added contentEqualsIgnoreEOL methods to both classes Issue: IO-275. Thanks to CJ Aspromgos. - -Fixed Bugs: -o IOUtils.read(InputStream/Reader) ignores the offset parameter Issue: IO-311. Thanks to Robert Muir. -o CharSequenceInputStream(CharSequence s, Charset charset, int bufferSize) ignores bufferSize Issue: IO-312. -o FileUtils.moveDirectoryToDirectory removes source directory if destination is a subdirectory Issue: IO-300. -o ReaderInputStream#read(byte[] b, int off, int len) should check for valid parameters Issue: IO-307. -o ReaderInputStream#read(byte[] b, int off, int len) should always return 0 for length == 0 Issue: IO-306. -o "FileUtils#deleteDirectoryOnExit(File)" does not work Issue: IO-276. Thanks to nkami. -o BoundedInputStream.read() treats max differently from BoundedInputStream.read(byte[]...) Issue: IO-273. Thanks to sebb. -o Various methods of class 'org.apache.commons.io.FileUtils' incorrectly suppress 'java.io.IOException' Issue: IO-298. Thanks to Christian Schulte. - -Changes: -o ReaderInputStream optimization: more efficient reading of small chunks of data Issue: IO-296. Thanks to Oleg Kalnichevski. - - -Compatibility with 2.1 and 1.4: -Binary compatible: Yes -Source compatible: Yes -Semantic compatible: Yes. Check the bug fixes section for semantic bug fixes - -Commons IO 2.2 requires a minimum of JDK 1.5. -Commons IO 1.4 requires a minimum of JDK 1.3. - -============================================================================== -Apache Commons IO Version 2.1 -============================================================================== - -New features: -o Use standard Maven directory layout Issue: IO-285. Thanks to ggregory. -o Add IOUtils API toString for URL and URI to get contents Issue: IO-284. Thanks to ggregory. -o Add API FileUtils.copyFile(File input, OutputStream output) Issue: IO-282. Thanks to ggregory. -o FileAlterationObserver has no getter for FileFilter Issue: IO-262. -o Add FileUtils.getFile API with varargs parameter Issue: IO-261. -o Add new APPEND parameter for writing string into files Issue: IO-182. -o Add new read method "toByteArray" to handle InputStream with known size. Issue: IO-251. Thanks to Marco Albini. - -Fixed Bugs: -o Dubious use of mkdirs() return code Issue: IO-280. Thanks to sebb. -o ReaderInputStream enters infinite loop when it encounters an unmappable character Issue: IO-277. -o FileUtils.moveFile() JavaDoc should specify FileExistsException thrown Issue: IO-264. -o ClassLoaderObjectInputStream does not handle Proxy classes Issue: IO-260. -o Tailer returning partial lines when reaching EOF before EOL Issue: IO-274. Thanks to Frank Grimes. -o FileUtils.copyFile() throws IOException when copying large files to a shared directory (on Windows) Issue: IO-266. Thanks to Igor Smereka. -o FileSystemUtils.freeSpaceKb throws exception for Windows volumes with no visible files. - Improve coverage by also looking for hidden files. Issue: IO-263. Thanks to Gil Adam. - -Changes: -o FileAlterationMonitor.stop(boolean allowIntervalToFinish) Issue: IO-259. - -============================================================================== -Apache Commons IO Package 2.0.1 -============================================================================== - -Compatibility with 2.0 and 1.4 ------------------------------- -Binary compatible - Yes - -Source compatible - Yes - -Semantic compatible - Yes - Check the bug fixes section for semantic bug fixes - -Commons IO 2.0.1 requires a minimum of JDK 1.5 - (Commons IO 1.4 had a minimum of JDK 1.3) - -Enhancements from 2.0 ---------------------- - - * [IO-256] - Provide thread factory for FileAlternationMonitor - -Bug fixes from 2.0 ------------------- - - * [IO-257] - BOMInputStream.read(byte[]) can return 0 which it should not - * [IO-258] - XmlStreamReader consumes the stream during encoding detection - -============================================================================== -Apache Commons IO Package 2.0 -============================================================================== - -Compatibility with 1.4 ----------------------- -Binary compatible - Yes - -Source compatible - Yes - -Semantic compatible - Yes - Check the bug fixes section for semantic bug fixes - -Commons IO 2.0 requires a minimum of JDK 1.5 - (Commons IO 1.4 had a minimum of JDK 1.3) - -Deprecations from 1.4 ---------------------- - -- IOUtils - - write(StringBuffer, Writer) in favour of write(CharSequence, Writer) - - write(StringBuffer, OutputStream) in favour of write(CharSequence, OutputStream) - - write(StringBuffer, OutputStream, String) in favour of write(CharSequence, OutputStream, String) - -- FileFilterUtils - - andFileFilter(IOFileFilter, IOFileFilter) in favour of and(IOFileFilter...) - - orFileFilter(IOFileFilter, IOFileFilter) in favour of or(IOFileFilter...) - -Enhancements from 1.4 ---------------------- - - * [IO-140] Move minimum Java requirement from JDK 1.3 to JDK 1.5 - - use Generics - - add new CharSequence write() flavour methods to IOUtils and FileUtils - - replace StringBuffer with StringBuilder, where appropriate - - add new Reader/Writer methods to ProxyReader and ProxyWriter - - Annotate with @Override and @Deprecated - - * [IO-178] New BOMInputStream and ByteOrderMark implementations - to detect and optionally exclude an initial Byte Order mark (BOM) - * [IO-197] New BoundedInputStream (copied from from Apache JackRabbit) - * [IO-193] New Broken Input and Output streams - * [IO-132] New File Listener/Monitor facility - * [IO-158] New ReaderInputStream and WriterOutputStream implementations - * [IO-139] New StringBuilder Writer implementation - * [IO-192] New Tagged Input and Output streams - * [IO-177] New Tailer class - simple implementation of the Unix "tail -f" functionality - * [IO-162] New XML Stream Reader/Writer implementations (from ROME via plexus-utils) - - * [IO-142] Comparators - add facility to sort file lists/arrays - * [IO-186] Comparators - new Composite and Directory File Comparator implementations - * [IO-176] DirectoryWalker - add filterDirectoryContents() callback method for filtering directory contents - * [IO-210] FileFilter - new Magic Number FileFilter - * [IO-221] FileFilterUtils - add methods for suffix and prefix filters which take an IOCase object - * [IO-232] FileFilterUtils - add method for name filters which take an IOCase object - * [IO-229] FileFilterUtils - add varargs and() and or() methods - * [IO-198] FileFilterUtils - add ability to apply file filters to collections and arrays - * [IO-156] FilenameUtils - add normalize() and normalizeNoEndSeparator() methods which allow the separator character to be specified - * [IO-194] FileSystemUtils - add freeSpaceKb() method with no input arguments - * [IO-185] FileSystemUtils - add freeSpaceKb() methods that take a timeout parameter - fixes freeSpaceWindows() blocks - * [IO-155] FileUtils - use NIO to copy files - * [IO-168] FileUtils - add new isSymlink() method - * [IO-219] FileUtils - throw FileExistsException when moving a file or directory if the destination already exists - * [IO-234] FileUtils - add Methods for retrieving System User/Temp directories/paths - * [IO-208] FileUtils - add timeout (connection and read) support for copyURLToFile() method - * [IO-238] FileUtils - add sizeOf(File) method - * [IO-181] LineIterator now implements Iterable - * [IO-224] IOUtils - add closeQuietly(Closeable) and closeQuietly(Socket) methods - * [IO-203] IOUtils - add skipFully() method for InputStreams - * [IO-137] IOUtils and ByteArrayOutputStream - add toBufferedInputStream() method to avoid unnecessary array allocation/copy - * [IO-195] Proxy streams/Reader/Writer - provide exception handling methods - * [IO-211] Proxy Input/Output streams - add pre/post processing support - * [IO-242] Proxy Reader/Writer - add pre/post processing support - -Bug fixes from 1.4 ------------------- - * [IO-214] ByteArrayOutputStream - fix inconsistent synchronization of fields - * [IO-201] Counting Input/Output streams - fix inconsistent synchronization - * [IO-159] FileCleaningTracker - fix remove() never returns null - * [IO-220] FileCleaningTracker - fix Vector performs badly under load - * [IO-167] FilenameUtils - fix case-insensitive string handling in FilenameUtils and FilesystemUtils - * [IO-179] FilenameUtils - fix StringIndexOutOfBounds exception in getPathNoEndSeparator() - * [IO-248] FilenameUtils - fix getFullPathNoEndSeparator() returns empty while path is a one level directory - * [IO-246] FilenameUtils - fix wildcardMatch gives incorrect results - * [IO-187] FileSystemUtils - fix freeSpaceKb() doesn't work with relative paths on Linux - * [IO-160] FileSystemUtils - fix freeSpace() fails on solaris - * [IO-209] FileSystemUtils - fix freeSpaceKb() fails to return correct size for a windows mount point - * [IO-163] FileUtils - fix toURLs() using deprecated method of conversion to URL - * [IO-168] FileUtils - fix Symbolic links followed when deleting directory - * [IO-231] FileUtils - fix wrong exception message generated in isFileNewer() method - * [IO-207] FileUtils - fix race condition in forceMkdir() method - * [IO-217] FileUtils - fix copyDirectoryToDirectory() makes infinite loops - * [IO-166] FileUtils - fix URL decoding in toFile(URL) - * [IO-190] FileUtils - fix copyDirectory not preserving lastmodified date on sub-directories - * [IO-240] FileFilterUtils - ensure cvsFilter and svnFilter are only created once. - * [IO-175] IOUtils - fix copyFile() issues with very large files - * [IO-191] Improvements from static analysis - * [IO-216] LockableFileWriter - delete files quietly when an exception is thrown during initialization - * [IO-243] SwappedDataInputStream - fix readBoolean is inverted - * [IO-235] Tests - remove unused YellOnFlushAndCloseOutputStream from CopyUtilsTest - * [IO-161] Tests - fix FileCleaningTrackerTestCase hanging - -Documentation changes from 1.4 ------------------------------- - * [IO-183 FilenameUtils.getExtension() method documentation improvements - * [IO-226 FileUtils.byteCountToDisplaySize() documentation corrections - * [IO-205 FileUtils.forceMkdir() documentation improvements - * [IO-215 FileUtils copy file/directory improve documentation regarding preserving the last modified date - * [IO-189 HexDump.dump() method documentation improvements - * [IO-171 IOCase document that it assumes there are only two OSes: Windows and Unix - * [IO-223 IOUtils.copy() documentation corrections - * [IO-247 IOUtils.closeQuietly() improve documentation with examples - * [IO-202 NotFileFilter documentation corrections - * [IO-206 ProxyInputStream - fix misleading parameter names - * [IO-212 ProxyInputStream.skip() documentation corrections - -============================================================================== -Apache Commons IO Version 1.4 -============================================================================== - -Compatibility with 1.3.2 ------------------------- -Binary compatible - Yes - -Source compatible - Yes - -Semantic compatible - Yes - Check the bug fixes section for semantic bug fixes - -Commons IO 1.4 introduces four new implementations which depend on JDK 1.4 features -(CharSequenceReader, FileWriterWithEncoding, IOExceptionWithCause and RegexFileFilter). -It has been built with the JDK source and target options set to JDK 1.3 and, except for -those implementations, can be used with JDK 1.3 (see IO IO-127). - -Deprecations from 1.3.2 ------------------------ -- FileCleaner deprecated in favour of FileCleaningTracker [see IO-116] - -Bug fixes from 1.3.2 --------------------- -- FileUtils - - forceDelete of orphaned Softlinks does not work [IO-147] - - Infinite loop on FileUtils.copyDirectory when the destination directory is within - the source directory [IO-141] - - Add a copyDirectory() method that makes use of FileFilter [IO-105] - - Add moveDirectory() and moveFile() methods [IO-77] - -- HexDump - - HexDump's use of static StringBuffers isn't thread-safe [IO-136] - -Enhancements from 1.3.2 ------------------------ -- FileUtils - - Add a deleteQuietly method [IO-135] - -- FilenameUtils - - Add file name extension separator constants[IO-149] - -- IOExceptionWithCause [IO-148] - - Add a new IOException implementation with constructors which take a cause - -- TeeInputStream [IO-129] - - Add new Tee input stream implementation - -- FileWriterWithEncoding [IO-153] - - Add new File Writer implementation that accepts an encoding - -- CharSequenceReader [IO-138] - - Add new Reader implementation that handles any CharSequence (String, - StringBuffer, StringBuilder or CharBuffer) - -- ThesholdingOuputStream [IO-121] - - Add a reset() method which sets the count of the bytes written back to zero. - -- DeferredFileOutputStream [IO-130] - - Add support for temporary files - -- ByteArrayOutputStream - - Add a new write(InputStream) method [IO-152] - -- New Closed Input/Output stream implementations [IO-122] - - AutoCloseInputStream - automatically closes and discards the underlying input stream - - ClosedInputStream - returns -1 for any read attempts - - ClosedOutputStream - throws an IOException for any write attempts - - CloseShieldInputStream - prevents the underlying input stream from being closed. - - CloseShieldOutputStream - prevents the underlying output stream from being closed. - -- Add Singleton Constants to several stream classes [IO-143] - -- PrefixFileFilter [IO-126] - - Add faciltiy to specify case sensitivity on prefix matching - -- SuffixFileFilter [IO-126] - - Add faciltiy to specify case sensitivity on suffix matching - -- RegexFileFilter [IO-74] - - Add new regular expression file filter implementation - -- Make IOFileFilter implementations Serializable [IO-131] - -- Improve IOFileFilter toString() methods [IO-120] - -- Make fields final so classes are immutable/threadsafe [IO-133] - - changes to Age, Delegate, Name, Not, Prefix, Regex, Size, Suffix and Wildcard IOFileFilter - implementations. - -- IOCase - - Add a compare method to IOCase [IO-144] - -- Add a package of java.util.Comparator implementations for files [IO-145] - - DefaultFileComparator - compare files using the default File.compareTo(File) method. - - ExtensionFileComparator - compares files using file name extensions. - - LastModifiedFileComparator - compares files using the last modified date/time. - - NameFileComparator - compares files using file names. - - PathFileComparator - compares files using file paths. - - SizeFileComparator - compares files using file sizes. - -============================================================================== -Apache Commons IO Version 1.3.2 -============================================================================== - -Compatibility with 1.3.1 ----------------------- -Binary compatible - Yes - -Source compatible - Yes - -Semantic compatible - Yes - -Compatibility with 1.3 ----------------------- -Binary compatible - No - See [IO-113] - -Source compatible - No - See [IO-113] - -Semantic compatible - Yes - -Enhancements since 1.3.1 ------------------------- - -- Created the FileCleaningTracker, basically a non-static version of the - FileCleaner, which can be controlled by the user. [IO-116] -- The FileCleaner is deprecated. - -Bug fixes from 1.3.1 --------------------- - -- Some tests, which are implicitly assuming a Unix-like file system, are - now skipped on Windows. [IO-115] -- EndianUtils - - Both readSwappedUnsignedInteger(...) methods could return negative - numbers due to int/long casting. [IO-117] - -Bug fixes from 1.3 ------------------- - -- FileUtils - - NPE in openOutputStream(File) when file has no parent in path [IO-112] - - readFileToString(File) is not static [IO-113] - -============================================================================== -Apache Commons IO Version 1.3.1 -============================================================================== - -Compatibility with 1.3 ----------------------- -Binary compatible - No - See [IO-113] - -Source compatible - No - See [IO-113] - -Semantic compatible - Yes - -Bug fixes from 1.3 ------------------- - -- FileUtils - - NPE in openOutputStream(File) when file has no parent in path [IO-112] - - readFileToString(File) is not static [IO-113] - -============================================================================== -Apache Commons IO Version 1.3 -============================================================================== - -Compatibility with 1.2 ----------------------- -Binary compatible - Yes - -Source compatible - Yes - -Semantic compatible - Yes - Check the bug fixes section for semantic bug fixes - -Deprecations from 1.2 ---------------------- -- WildcardFilter deprecated, replaced by WildcardFileFilter - - old class only accepted files, thus had a confusing dual purpose - -- FileSystemUtils.freeSpace deprecated, replaced by freeSpaceKb - - freeSpace returns a result that varies by operating system and - thus isn't that useful - - freeSpaceKb returns much better and more consistent results - - freeSpaceKb existed in v1.2, so this is a gentle cutover - -Bug fixes from 1.2 ------------------- -- LineIterator now implements Iterator - - It was always supposed to... - -- FileSystemUtils.freeSpace/freeSpaceKb [IO-83] - - These should now work on AIX and HP-UX - -- FileSystemUtils.freeSpace/freeSpaceKb [IO-90] - - Avoid infinite looping in Windows - - Catch more errors with nice messages - -- FileSystemUtils.freeSpace [IO-91] - - This is now documented not to work on SunOS 5 - -- FileSystemUtils [IO-93] - - Fixed resource leak leading to 'Too many open files' error - - Previously did not destroy Process instances (as JDK Javadoc is so poor) - - http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4801027 - -- FileUtils.touch [IO-100] - - The touch method previously gave no indication when the file could not - be touched successfully (such as due to access restrictions) - it now - throws an IOException if the last modified date cannot be changed - -- FileCleaner - - This now handles the situation where an error occurs when deleting the file - -- IOUtils.copy [IO-84] - - Copy methods could return inaccurate byte/char count for large streams - - The copy(InputStream, OutputStream) method now returns -1 if the count is greater than an int - - The copy(Reader, Writer) method now throws now returns -1 if the count is greater than an int - - Added a new copyLarge(InputStream, OutputStream) method that returns a long - - Added a new copyLarge(Reader, Writer) method that returns a long - -- CountingInputStream/CountingOutputStream [IO-84] - - Methods were declared as int thus the count was innacurate for large streams - - new long based methods getByteCount()/resetByteCount() added - - existing methods changed to throw an exception if the count is greater than an int - -- FileBasedTestCase - - Fixed bug in compare content methods identified by GNU classpath - -- EndianUtils.writeSwappedLong(byte[], int) [IO-101] - - An int overrun in the bit shifting when it should have been a long - -- EndianUtils.writeSwappedLong(InputStream) [IO-102] - - The return of input.read(byte[]) was not being checked to ensure all 8 bytes were read - -Enhancements from 1.2 ---------------------- -- DirectoryWalker [IO-86] - - New class designed for subclassing to walk through a set of files. - DirectoryWalker provides the walk of the directories, filtering of - directories and files, and cancellation support. The subclass must provide - the specific behaviour, such as text searching or image processing. - -- IOCase - - New class/enumeration for case-sensitivity control - -- FilenameUtils - - New methods to handle case-sensitivity - - wildcardMatch - new method that has IOCase as a parameter - - equals - new method that has IOCase as a parameter - -- FileUtils [IO-108] - new default encoding methods for: - - readFileToString(File) - - readLines(File) - - lineIterator(File) - - writeStringToFile(File, String) - - writeLines(File, Collection) - - writeLines(File, Collection, String) - -- FileUtils.openOutputStream [IO-107] - - new method to open a FileOutputStream, creating parent directories if required -- FileUtils.touch -- FileUtils.copyURLToFile -- FileUtils.writeStringToFile -- FileUtils.writeByteArrayToFile -- FileUtils.writeLines - - enhanced to create parent directories if required -- FileUtils.openInputStream [IO-107] - - new method to open a FileInputStream, providing better error messages than the JDK - -- FileUtils.isFileOlder - - new methods to check if a file is older (i.e. isFileOlder()) - counterparts - to the existing isFileNewer() methods. - -- FileUtils.checksum, FileUtils.checksumCRC32 - - new methods to create a checksum of a file - -- FileUtils.copyFileToDirectory [IO-104] - - new variant that optionally retains the file date - -- FileDeleteStrategy -- FileCleaner [IO-56,IO-70] - - FileDeleteStrategy is a strategy for handling file deletion - - This can be used as a calback in FileCleaner - - Together these allow FileCleaner to do a forceDelete to kill directories - -- FileCleaner.exitWhenFinished [IO-99] - - A new method that allows the internal cleaner thread to be cleanly terminated - -- WildcardFileFilter - - Replacement for WildcardFilter - - Accepts both files and directories - - Ability to control case-sensitivity - -- NameFileFilter - - Ability to control case-sensitivity - -- FileFileFilter - - New IOFileFilter implementation - - Accepts files where File.isFile() is true - - In other words it filters out directories - - Singleton instance provided (FILE) - -- CanReadFileFilter - - New IOFileFilter implementation - - Accepts files where File.canRead() is true - - Singleton instances provided (CAN_READ/CANNOT_READ/READ_ONLY) - -- CanWriteFileFilter - - New IOFileFilter implementation - - Accepts files where File.canWrite() is true - - Singleton instances provided (CAN_WRITE/CANNOT_WRITE) - -- HiddenFileFilter - - New IOFileFilter implementation - - Accepts files where File.isHidden() is true - - Singleton instances provided (HIDDEN/VISIBLE) - -- EmptyFileFilter - - New IOFileFilter implementation - - Accepts files or directories that are empty - - Singleton instances provided (EMPTY/NOT_EMPTY) - -- TrueFileFilter/FalseFileFilter/DirectoryFileFilter - - New singleton instance constants (TRUE/FALSE/DIRECTORY) - - The new constants are more JDK 1.5 friendly with regards to static imports - (whereas if everything uses INSTANCE, then they just clash) - - The old INSTANCE constants are still present and have not been deprecated - -- FileFilterUtils.sizeRangeFileFilter - - new sizeRangeFileFilter(long minimumSize, long maximumSize) method which - creates a filter that accepts files within the specified size range. - -- FileFilterUtils.makeDirectoryOnly/makeFileOnly - - two new methods that decorate a file filter to make it apply to - directories only or files only - -- NullWriter - - New writer that acts as a sink for all data, as per /dev/null - -- NullInputStream - - New input stream that emulates a stream of a specified size - -- NullReader - - New reader that emulates a reader of a specified size - -- ByteArrayOutputStream [IO-97] - - Performance enhancements - -============================================================================== -Apache Commons IO Version 1.2 -============================================================================== - -Compatibility with 1.1 ----------------------- -Binary compatible - Yes - -Source compatible - Yes - -Semantic compatible - Yes - -Deprecations from 1.1 ---------------------- - -Bug fixes from 1.1 ------------------- -- FileSystemUtils.freeSpace(drive) - Fix to allow Windows based command to function in French locale - -- FileUtils.read* - Increase certainty that files are closed in case of error - -- LockableFileWriter - Locking mechanism was broken and only provided limited protection [38942] - File deletion and locking in case of constructor error was broken - -Enhancements from 1.1 ---------------------- -- AgeFileFilter/SizeFileFilter - New file filters that compares against the age and size of the file - -- FileSystemUtils.freeSpaceKb(drive) - New method that unifies result to be in kilobytes [38574] - -- FileUtils.contentEquals(File,File) - Performance improved by adding length and file location checking - -- FileUtils.iterateFiles - Two new method to provide direct access to iterators over files - -- FileUtils.lineIterator - IOUtils.lineIterator - New methods to provide an iterator over the lines in a file [38083] - -- FileUtils.copyDirectoryToDirectory - New method to copy a directory to within another directory [36315] - -============================================================================== -Apache Commons IO Version 1.1 -============================================================================== - -Incompatible changes from 1.0 ------------------------------ -Binary compatible - Yes - -Source compatible - Yes - -Semantic compatible - Yes, except: -- FileUtils.writeStringToFile() - A null encoding previously used 'ISO-8859-1', now it uses the platform default - Generally this will make no difference - -- LockableFileWriter - Improved validation and now create directories if necesssary - -plus these bug fixes may affect you semantically: -- FileUtils.touch() (Bug fix 29821) - Now creates the file if it did not previously exist - -- FileUtils.toFile(URL) (Bug fix 32575) - Now handles escape syntax such as %20 - -- FileUtils.sizeOfDirectory() (Bug fix 36801) - May now return a size of 0 if the directory is security restricted - -Deprecations from 1.0 ---------------------- -- CopyUtils has been deprecated. - Its methods have been moved to IOUtils. - The new IOUtils methods handle nulls better, and have clearer names. - -- IOUtils.toByteArray(String) - Use {@link String#getBytes()} -- IOUtils.toString(byte[]) - Use {@link String#String(byte[])} -- IOUtils.toString(byte[],String) - Use {@link String#String(byte[],String)} - -Bug fixes from 1.0 ------------------- -- FileUtils - touch() [29821] - Now creates the file if it did not previously exist - -- FileUtils - toFile(URL) [32575] - Now handles escape syntax such as %20 - -- FileFilterUtils - makeCVSAware(IOFileFilter) [33023] - Fixed bug that caused method to be completely broken - -- CountingInputStream [33336] - Fixed bug that caused the count to reduce by one at the end of the stream - -- CountingInputStream - skip(long) [34311] - Bytes from calls to this method were not previously counted - -- NullOutputStream [33481] - Remove unnecessary synchronization - -- AbstractFileFilter - accept(File, String) [30992] - Fixed broken implementation - -- FileUtils [36801] - Previously threw NPE when listing files in a security restricted directory - Now throw IOException with a better message - -- FileUtils - writeStringToFile() - Null encoding now correctly uses the platform default - -Enhancements from 1.0 ---------------------- -- FilenameUtils - new class [33303,29351] - A static utility class for working with filenames - Seeks to ease the pain of developing on Windows and deploying on Unix - -- FileSystemUtils - new class [32982,36325] - A static utility class for working with file systems - Provides one method at present, to get the free space on the filing system - -- IOUtils - new public constants - Constants for directory and line separators on Windows and Unix - -- IOUtils - toByteArray(Reader,encoding) - Handles encodings when reading to a byte array - -- IOUtils - toCharArray(InputStream) [28979] - - toCharArray(InputStream,encoding) - - toCharArray(Reader) - Reads a stream/reader into a charatcter array - -- IOUtils - readLines(InputStream) [36214] - - readLines(InputStream,encoding) - - readLines(Reader) - Reads a stream/reader line by line into a List of Strings - -- IOUtils - toInputStream(String) [32958] - - toInputStream(String,encoding) - Creates an input stream that uses the string as a source of data - -- IOUtils - writeLines(Collection,lineEnding,OutputStream) [36214] - - writeLines(Collection,lineEnding,OutputStream,encoding) - - writeLines(Collection,lineEnding,Writer) - Writes a collection to a stream/writer line by line - -- IOUtils - write(...) - Write data to a stream/writer (moved from CopyUtils with better null handling) - -- IOUtils - copy(...) - Copy data between streams (moved from CopyUtils with better null handling) - -- IOUtils - contentEquals(Reader,Reader) - Method to compare the contents of two readers - -- FileUtils - toFiles(URL[]) - Converts an array of URLs to an array of Files - -- FileUtils - copyDirectory() [32944] - New methods to copy a directory - -- FileUtils - readFileToByteArray(File) - Reads an entire file into a byte array - -- FileUtils - writeByteArrayToFile(File,byte[]) - Writes a byte array to a file - -- FileUtils - readLines(File,encoding) [36214] - Reads a file line by line into a List of Strings - -- FileUtils - writeLines(File,encoding,List) - writeLines(File,encoding,List,lineEnding) - Writes a collection to a file line by line - -- FileUtils - EMPTY_FILE_ARRAY - Constant for an empty array of File objects - -- ConditionalFileFilter - new interface [30705] - Defines the behaviour of list based filters - -- AndFileFilter, OrFileFilter [30705] - Now support a list of filters to and/or - -- WildcardFilter [31115] - New filter that can match using wildcard file names - -- FileFilterUtils - makeSVNAware(IOFileFilter) - New method, like makeCVSAware, that ignores Subversion source control directories - -- ClassLoaderObjectInputStream - An ObjectInputStream that supports a ClassLoader - -- CountingInputStream,CountingOutputStream - resetCount() [28976] - Adds the ability to reset the count part way through reading/writing the stream - -- DeferredFileOutputStream - writeTo(OutputStream) [34173] - New method to allow current contents to be written to a stream - -- DeferredFileOutputStream [34142] - Performance optimizations avoiding double buffering - -- LockableFileWriter - encoding support [36825] - Add support for character encodings to LockableFileWriter - Improve the validation - Create directories if necesssary - -- IOUtils and EndianUtils are no longer final [28978] - Allows developers to have subclasses if desired - -============================================================================== -Feedback -============================================================================== - -Open source works best when you give feedback: -http://commons.apache.org/io/ +Release Notes - Commons IO - Version 2.5 -Please direct all bug reports to JIRA -http://issues.apache.org/jira/browse/IO +** Bug + * [IO-299] - getPrefixLength returns null if filename has leading slashes + * [IO-323] - What should happen in FileUtils.sizeOf[Directory] when an overflow takes place? + * [IO-328] - FileUtils.listFilesAndDirs includes original dir in results even when it doesn't match filter + * [IO-343] - org.apache.commons.io.comparator Javadoc is inconsistent with real code + * [IO-354] - Commons IO Tailer does not respect UTF-8 Charset + * [IO-355] - IOUtils copyLarge() and skip() methods are performance hogs + * [IO-356] - CharSequenceInputStream#reset() behaves incorrectly in case when buffer size is not dividable by data size + * [IO-357] - [Tailer] InterruptedException while the thead is sleeping is silently ignored + * [IO-361] - Add API FileUtils.forceMkdirsParent() + * [IO-362] - IOUtils.contentEquals* methods returns false if input1 == input2, should return true + * [IO-368] - ClassLoaderObjectInputStream does not handle primitive typed members + * [IO-372] - FileUtils.moveDirectory can produce misleading error message on failiure + * [IO-374] - WildcardFileFilter ctors should not use null to mean IOCase.SENSITIVE when delegating to other ctors + * [IO-379] - CharSequenceInputStream - add tests for available() + * [IO-383] - FileUtils.doCopyFile caches the file size; needs to be documented + * [IO-389] - FileUtils.sizeOfDirectory can throw IllegalArgumentException + * [IO-390] - FileUtils.sizeOfDirectoryAsBigInteger can overflow + * [IO-395] - [IO] Configurable Buffered Size + * [IO-401] - [IO] copyFileToDirectory - Over-Write File + * [IO-428] - BOMInputStream.skip returns wrong count if stream contains no BOM + * [IO-436] - Improper JavaDoc comment for FilenameUtils.indexOfExtension + * [IO-448] - FileUtils.waitFor(...) swallows thread interrupted status + * [IO-451] - ant test fails - resources missing from test classpath + * [IO-453] - Regression in FileUtils.readFileToString from 2.0.1 + * [IO-462] - IOExceptionWithCause no longer needed + * [IO-479] - Correct exception message in FileUtils.getFile(File, String...) + * [IO-481] - org.apache.commons.io.FileUtils#waitFor waits too long + * [IO-484] - FilenameUtils should handle embedded null bytes + * [IO-492] - Typo: In an IOUtils.java comment it says "focussed" instead of "focused" + * [IO-494] - Mismatch return type in api docs of class DirectoryWalker. + + +** Improvement + * [IO-233] - Add Methods for Buffering Streams/Writers To IOUtils + * [IO-239] - Convert IOCase to a Java 1.5+ Enumeration + * [IO-314] - Deprecate all methods that use the default encoding + * [IO-338] - When a file is rotated, finish reading previous file prior to starting new one + * [IO-341] - A constant for holding the BOM character (U+FEFF) + * [IO-345] - Supply a hook method allowing Tailer actively determining stop condition + * [IO-346] - Add ByteArrayOutputStream.toInputStream() + * [IO-348] - Missing information in IllegalArgumentException thrown by org.apache.commons.io.FileUtils#validateListFilesParameters + * [IO-349] - Add API with array offset and length argument to FileUtils.writeByteArrayToFile + * [IO-352] - Spelling fixes + * [IO-353] - Add API IOUtils.copy(InputStream, OutputStream, int) + * [IO-375] - FilenameUtils.splitOnTokens(String text) check for '**' could be simplified + * [IO-380] - FileUtils.copyInputStreamToFile should document it closes the input source + * [IO-433] - Upgrade To Use JUnit @Annotations + * [IO-435] - Javadoc of methods in FileUtils does not mention thrown IllegalArgumentException + * [IO-437] - Make IOUtils.EOF public and reuse it in various classes + * [IO-452] - FileUtils.isSymlink returns false for broken symlinks. + * [IO-471] - Support for additional encodings needed in ReversedLinesFileReader + * [IO-487] - ValidatingObjectInputStream contribution - restrict which classes can be deserialized + + + +** New Feature + * [IO-330] - IOUtils#toBufferedOutputStream/toBufferedWriter to conditionally wrap the output + * [IO-358] - Add IOUtils.read and readFully(ReadableByteChannel, ByteBuffer buffer) + * [IO-359] - Add IOUtils.skip and skipFully(ReadableByteChannel, long) + * [IO-360] - Add API Charsets.requiredCharsets() + * [IO-381] - Add FileUtils.copyInputStreamToFile API with option to leave the source open + * [IO-382] - Chunked IO for large arrays + * [IO-385] - FileUtils.doCopyFile can potentially loop for ever + * [IO-400] - IOUtils: add support for copying from large byte buffers + * [IO-425] - Setter method for ThresholdingOutputStream + * [IO-426] - Add API IOUtils.closeQuietly(Closeable...) + * [IO-446] - adds an endOfFileReached method to the TailerListener + * [IO-457] - Add BoundedReader + * [IO-459] - Add WindowsLineEndingInputStream and UnixLineEndingInputStream + + +** Task + * [IO-406] - Introduce new class AppendableOutputStream + * [IO-422] - Deprecate Charsets Charset constants in favor of Java 7's java.nio.charset.StandardCharsets + * [IO-465] - Update to JUnit 4.12 + + +** Wish + * [IO-403] - [IO] copyFileToDirectory - Over-Write File + * [IO-410] - [IO] Readfully() That Returns A Byte Array -Or subscribe to the commons-user mailing list (prefix emails by [io]) -http://commons.apache.org/mail-lists.html -The Commons-IO Team