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