Author: ggregory
Date: Thu Sep 29 12:43:41 2011
New Revision: 1177287
URL: http://svn.apache.org/viewvc?rev=1177287&view=rev
Log:
Comprehensive release notes with history.
Modified:
commons/proper/io/trunk/RELEASE-NOTES.txt
Modified: commons/proper/io/trunk/RELEASE-NOTES.txt
URL:
http://svn.apache.org/viewvc/commons/proper/io/trunk/RELEASE-NOTES.txt?rev=1177287&r1=1177286&r2=1177287&view=diff
==============================================================================
--- commons/proper/io/trunk/RELEASE-NOTES.txt (original)
+++ commons/proper/io/trunk/RELEASE-NOTES.txt Thu Sep 29 12:43:41 2011
@@ -1,7 +1,7 @@
$Id$
Commons IO Package
- Version 2.0.1
+ Version 2.1
Release Notes
@@ -14,6 +14,36 @@ reuse as to justify existence in java.io
Commons IO contains utility classes, stream implementations, file filters,
file comparators and endian transformation classes.
+==============================================================================
+Commons IO Package 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.
+
+
+==============================================================================
+Commons IO Package Version 2.0.1
+==============================================================================
Compatibility with 2.0 and 1.4
------------------------------
@@ -40,8 +70,719 @@ 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
+==============================================================================
+Commons IO Package Version 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
+
+==============================================================================
+Commons IO Package 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.
+
+
+==============================================================================
+Commons IO Package 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]
+
+
+==============================================================================
+Commons IO Package 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]
+
+
+==============================================================================
+Commons IO Package 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
+
+
+==============================================================================
+Commons IO Package 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]
+
+
+==============================================================================
+Commons IO Package 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 unecessary 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/