1*0c4d7b72SSadaf Ebrahimi<?xml version="1.0"?> 2*0c4d7b72SSadaf Ebrahimi<!-- 3*0c4d7b72SSadaf EbrahimiLicensed to the Apache Software Foundation (ASF) under one or more 4*0c4d7b72SSadaf Ebrahimicontributor license agreements. See the NOTICE file distributed with 5*0c4d7b72SSadaf Ebrahimithis work for additional information regarding copyright ownership. 6*0c4d7b72SSadaf EbrahimiThe ASF licenses this file to You under the Apache License, Version 2.0 7*0c4d7b72SSadaf Ebrahimi(the "License"); you may not use this file except in compliance with 8*0c4d7b72SSadaf Ebrahimithe License. You may obtain a copy of the License at 9*0c4d7b72SSadaf Ebrahimi 10*0c4d7b72SSadaf Ebrahimi http://www.apache.org/licenses/LICENSE-2.0 11*0c4d7b72SSadaf Ebrahimi 12*0c4d7b72SSadaf EbrahimiUnless required by applicable law or agreed to in writing, software 13*0c4d7b72SSadaf Ebrahimidistributed under the License is distributed on an "AS IS" BASIS, 14*0c4d7b72SSadaf EbrahimiWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15*0c4d7b72SSadaf EbrahimiSee the License for the specific language governing permissions and 16*0c4d7b72SSadaf Ebrahimilimitations under the License. 17*0c4d7b72SSadaf Ebrahimi--> 18*0c4d7b72SSadaf Ebrahimi<document> 19*0c4d7b72SSadaf Ebrahimi <properties> 20*0c4d7b72SSadaf Ebrahimi <title>Upgrade from 1.2 to 1.3</title> 21*0c4d7b72SSadaf Ebrahimi <author email="[email protected]">Commons Documentation Team</author> 22*0c4d7b72SSadaf Ebrahimi </properties> 23*0c4d7b72SSadaf Ebrahimi<body> 24*0c4d7b72SSadaf Ebrahimi 25*0c4d7b72SSadaf Ebrahimi<section name="Upgrade"> 26*0c4d7b72SSadaf Ebrahimi<p> 27*0c4d7b72SSadaf EbrahimiThese are the release notes and advice for upgrading Commons-IO from 28*0c4d7b72SSadaf Ebrahimiversion 1.2 to version 1.3. 29*0c4d7b72SSadaf Ebrahimi<source> 30*0c4d7b72SSadaf EbrahimiCommons IO is a package of Java utility classes for java.io's hierarchy. 31*0c4d7b72SSadaf EbrahimiClasses in this package are considered to be so standard and of such high 32*0c4d7b72SSadaf Ebrahimireuse as to justify existence in java.io. 33*0c4d7b72SSadaf Ebrahimi 34*0c4d7b72SSadaf EbrahimiCommons IO contains utility classes, stream implementations, file filters, 35*0c4d7b72SSadaf Ebrahimiand endian transformation classes. 36*0c4d7b72SSadaf Ebrahimi 37*0c4d7b72SSadaf Ebrahimi 38*0c4d7b72SSadaf EbrahimiCompatibility with 1.2 39*0c4d7b72SSadaf Ebrahimi---------------------- 40*0c4d7b72SSadaf EbrahimiBinary compatible - Yes 41*0c4d7b72SSadaf Ebrahimi 42*0c4d7b72SSadaf EbrahimiSource compatible - Yes 43*0c4d7b72SSadaf Ebrahimi 44*0c4d7b72SSadaf EbrahimiSemantic compatible - Yes 45*0c4d7b72SSadaf Ebrahimi Check the bug fixes section for semantic bug fixes 46*0c4d7b72SSadaf Ebrahimi 47*0c4d7b72SSadaf Ebrahimi 48*0c4d7b72SSadaf EbrahimiDeprecations from 1.2 49*0c4d7b72SSadaf Ebrahimi--------------------- 50*0c4d7b72SSadaf Ebrahimi- WildcardFilter deprecated, replaced by WildcardFileFilter 51*0c4d7b72SSadaf Ebrahimi - old class only accepted files, thus had a confusing dual purpose 52*0c4d7b72SSadaf Ebrahimi 53*0c4d7b72SSadaf Ebrahimi- FileSystemUtils.freeSpace deprecated, replaced by freeSpaceKb 54*0c4d7b72SSadaf Ebrahimi - freeSpace returns a result that varies by operating system and 55*0c4d7b72SSadaf Ebrahimi thus isn't that useful 56*0c4d7b72SSadaf Ebrahimi - freeSpaceKb returns much better and more consistent results 57*0c4d7b72SSadaf Ebrahimi - freeSpaceKb existed in v1.2, so this is a gentle cutover 58*0c4d7b72SSadaf Ebrahimi 59*0c4d7b72SSadaf Ebrahimi 60*0c4d7b72SSadaf EbrahimiBug fixes from 1.2 61*0c4d7b72SSadaf Ebrahimi------------------ 62*0c4d7b72SSadaf Ebrahimi- LineIterator now implements Iterator 63*0c4d7b72SSadaf Ebrahimi - It was always supposed to... 64*0c4d7b72SSadaf Ebrahimi 65*0c4d7b72SSadaf Ebrahimi- FileSystemUtils.freeSpace/freeSpaceKb [IO-83] 66*0c4d7b72SSadaf Ebrahimi - These should now work on AIX and HP-UX 67*0c4d7b72SSadaf Ebrahimi 68*0c4d7b72SSadaf Ebrahimi- FileSystemUtils.freeSpace/freeSpaceKb [IO-90] 69*0c4d7b72SSadaf Ebrahimi - Avoid infinite looping in Windows 70*0c4d7b72SSadaf Ebrahimi - Catch more errors with nice messages 71*0c4d7b72SSadaf Ebrahimi 72*0c4d7b72SSadaf Ebrahimi- FileSystemUtils.freeSpace [IO-91] 73*0c4d7b72SSadaf Ebrahimi - This is now documented not to work on SunOS 5 74*0c4d7b72SSadaf Ebrahimi 75*0c4d7b72SSadaf Ebrahimi- FileSystemUtils [IO-93] 76*0c4d7b72SSadaf Ebrahimi - Fixed resource leak leading to 'Too many open files' error 77*0c4d7b72SSadaf Ebrahimi - Previously did not destroy Process instances (as JDK Javadoc is so poor) 78*0c4d7b72SSadaf Ebrahimi - http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4801027 79*0c4d7b72SSadaf Ebrahimi 80*0c4d7b72SSadaf Ebrahimi- FileUtils.touch [IO-100] 81*0c4d7b72SSadaf Ebrahimi - The touch method previously gave no indication when the file could not 82*0c4d7b72SSadaf Ebrahimi be touched successfully (such as due to access restrictions) - it now 83*0c4d7b72SSadaf Ebrahimi throws an IOException if the last modified date cannot be changed 84*0c4d7b72SSadaf Ebrahimi 85*0c4d7b72SSadaf Ebrahimi- FileCleaner 86*0c4d7b72SSadaf Ebrahimi - This now handles the situation where an error occurs when deleting the file 87*0c4d7b72SSadaf Ebrahimi 88*0c4d7b72SSadaf Ebrahimi- IOUtils.copy [IO-84] 89*0c4d7b72SSadaf Ebrahimi - Copy methods could return inaccurate byte/char count for large streams 90*0c4d7b72SSadaf Ebrahimi - The copy(InputStream, OutputStream) method now returns -1 if the count is greater than an int 91*0c4d7b72SSadaf Ebrahimi - The copy(Reader, Writer) method now returns -1 if the count is greater than an int 92*0c4d7b72SSadaf Ebrahimi - Added a new copyLarge(InputStream, OutputStream) method that returns a long 93*0c4d7b72SSadaf Ebrahimi - Added a new copyLarge(Reader, Writer) method that returns a long 94*0c4d7b72SSadaf Ebrahimi 95*0c4d7b72SSadaf Ebrahimi- CountingInputStream/CountingOutputStream [IO-84] 96*0c4d7b72SSadaf Ebrahimi - Methods were declared as int thus the count was inaccurate for large streams 97*0c4d7b72SSadaf Ebrahimi - new long based methods getByteCount()/resetByteCount() added 98*0c4d7b72SSadaf Ebrahimi - existing methods changed to throw an exception if the count is greater than an int 99*0c4d7b72SSadaf Ebrahimi 100*0c4d7b72SSadaf Ebrahimi- FileBasedTestCase 101*0c4d7b72SSadaf Ebrahimi - Fixed bug in compare content methods identified by GNU classpath 102*0c4d7b72SSadaf Ebrahimi 103*0c4d7b72SSadaf Ebrahimi- EndianUtils.writeSwappedLong(byte[], int) [IO-101] 104*0c4d7b72SSadaf Ebrahimi - An int overrun in the bit shifting when it should have been a long 105*0c4d7b72SSadaf Ebrahimi 106*0c4d7b72SSadaf Ebrahimi- EndianUtils.writeSwappedLong(InputStream) [IO-102] 107*0c4d7b72SSadaf Ebrahimi - The return of input.read(byte[]) was not being checked to ensure all 8 bytes were read 108*0c4d7b72SSadaf Ebrahimi 109*0c4d7b72SSadaf EbrahimiEnhancements from 1.2 110*0c4d7b72SSadaf Ebrahimi--------------------- 111*0c4d7b72SSadaf Ebrahimi- DirectoryWalker [IO-86] 112*0c4d7b72SSadaf Ebrahimi - New class designed for subclassing to walk through a set of files. 113*0c4d7b72SSadaf Ebrahimi DirectoryWalker provides the walk of the directories, filtering of 114*0c4d7b72SSadaf Ebrahimi directories and files, and cancellation support. The subclass must provide 115*0c4d7b72SSadaf Ebrahimi the specific behavior, such as text searching or image processing. 116*0c4d7b72SSadaf Ebrahimi 117*0c4d7b72SSadaf Ebrahimi- IOCase 118*0c4d7b72SSadaf Ebrahimi - New class/enumeration for case-sensitivity control 119*0c4d7b72SSadaf Ebrahimi 120*0c4d7b72SSadaf Ebrahimi- FilenameUtils 121*0c4d7b72SSadaf Ebrahimi - New methods to handle case-sensitivity 122*0c4d7b72SSadaf Ebrahimi - wildcardMatch - new method that has IOCase as a parameter 123*0c4d7b72SSadaf Ebrahimi - equals - new method that has IOCase as a parameter 124*0c4d7b72SSadaf Ebrahimi 125*0c4d7b72SSadaf Ebrahimi- FileUtils [IO-108] - new default encoding methods for: 126*0c4d7b72SSadaf Ebrahimi - readFileToString(File) 127*0c4d7b72SSadaf Ebrahimi - readLines(File) 128*0c4d7b72SSadaf Ebrahimi - lineIterator(File) 129*0c4d7b72SSadaf Ebrahimi - writeStringToFile(File, String) 130*0c4d7b72SSadaf Ebrahimi - writeLines(File, Collection) 131*0c4d7b72SSadaf Ebrahimi - writeLines(File, Collection, String) 132*0c4d7b72SSadaf Ebrahimi 133*0c4d7b72SSadaf Ebrahimi- FileUtils.openOutputStream [IO-107] 134*0c4d7b72SSadaf Ebrahimi - new method to open a FileOutputStream, creating parent directories if required 135*0c4d7b72SSadaf Ebrahimi- FileUtils.touch 136*0c4d7b72SSadaf Ebrahimi- FileUtils.copyURLToFile 137*0c4d7b72SSadaf Ebrahimi- FileUtils.writeStringToFile 138*0c4d7b72SSadaf Ebrahimi- FileUtils.writeByteArrayToFile 139*0c4d7b72SSadaf Ebrahimi- FileUtils.writeLines 140*0c4d7b72SSadaf Ebrahimi - enhanced to create parent directories if required 141*0c4d7b72SSadaf Ebrahimi- FileUtils.openInputStream [IO-107] 142*0c4d7b72SSadaf Ebrahimi - new method to open a FileInputStream, providing better error messages than the JDK 143*0c4d7b72SSadaf Ebrahimi 144*0c4d7b72SSadaf Ebrahimi- FileUtils.isFileOlder 145*0c4d7b72SSadaf Ebrahimi - new methods to check if a file is older (i.e. isFileOlder()) - counterparts 146*0c4d7b72SSadaf Ebrahimi to the existing isFileNewer() methods. 147*0c4d7b72SSadaf Ebrahimi 148*0c4d7b72SSadaf Ebrahimi- FileUtils.checksum, FileUtils.checksumCRC32 149*0c4d7b72SSadaf Ebrahimi - new methods to create a checksum of a file 150*0c4d7b72SSadaf Ebrahimi 151*0c4d7b72SSadaf Ebrahimi- FileUtils.copyFileToDirectory [IO-104] 152*0c4d7b72SSadaf Ebrahimi - new variant that optionally retains the file date 153*0c4d7b72SSadaf Ebrahimi 154*0c4d7b72SSadaf Ebrahimi- FileDeleteStrategy 155*0c4d7b72SSadaf Ebrahimi- FileCleaner [IO-56,IO-70] 156*0c4d7b72SSadaf Ebrahimi - FileDeleteStrategy is a strategy for handling file deletion 157*0c4d7b72SSadaf Ebrahimi - This can be used as a callback in FileCleaner 158*0c4d7b72SSadaf Ebrahimi - Together these allow FileCleaner to do a forceDelete to kill directories 159*0c4d7b72SSadaf Ebrahimi 160*0c4d7b72SSadaf Ebrahimi- FileCleaner.exitWhenFinished [IO-99] 161*0c4d7b72SSadaf Ebrahimi - A new method that allows the internal cleaner thread to be cleanly terminated 162*0c4d7b72SSadaf Ebrahimi 163*0c4d7b72SSadaf Ebrahimi- WildcardFileFilter 164*0c4d7b72SSadaf Ebrahimi - Replacement for WildcardFilter 165*0c4d7b72SSadaf Ebrahimi - Accepts both files and directories 166*0c4d7b72SSadaf Ebrahimi - Ability to control case-sensitivity 167*0c4d7b72SSadaf Ebrahimi 168*0c4d7b72SSadaf Ebrahimi- NameFileFilter 169*0c4d7b72SSadaf Ebrahimi - Ability to control case-sensitivity 170*0c4d7b72SSadaf Ebrahimi 171*0c4d7b72SSadaf Ebrahimi- FileFileFilter 172*0c4d7b72SSadaf Ebrahimi - New IOFileFilter implementation 173*0c4d7b72SSadaf Ebrahimi - Accepts files where File.isFile() is true 174*0c4d7b72SSadaf Ebrahimi - In other words it filters out directories 175*0c4d7b72SSadaf Ebrahimi - Singleton instance provided (FILE) 176*0c4d7b72SSadaf Ebrahimi 177*0c4d7b72SSadaf Ebrahimi- CanReadFileFilter 178*0c4d7b72SSadaf Ebrahimi - New IOFileFilter implementation 179*0c4d7b72SSadaf Ebrahimi - Accepts files where File.canRead() is true 180*0c4d7b72SSadaf Ebrahimi - Singleton instances provided (CAN_READ/CANNOT_READ/READ_ONLY) 181*0c4d7b72SSadaf Ebrahimi 182*0c4d7b72SSadaf Ebrahimi- CanWriteFileFilter 183*0c4d7b72SSadaf Ebrahimi - New IOFileFilter implementation 184*0c4d7b72SSadaf Ebrahimi - Accepts files where File.canWrite() is true 185*0c4d7b72SSadaf Ebrahimi - Singleton instances provided (CAN_WRITE/CANNOT_WRITE) 186*0c4d7b72SSadaf Ebrahimi 187*0c4d7b72SSadaf Ebrahimi- HiddenFileFilter 188*0c4d7b72SSadaf Ebrahimi - New IOFileFilter implementation 189*0c4d7b72SSadaf Ebrahimi - Accepts files where File.isHidden() is true 190*0c4d7b72SSadaf Ebrahimi - Singleton instances provided (HIDDEN/VISIBLE) 191*0c4d7b72SSadaf Ebrahimi 192*0c4d7b72SSadaf Ebrahimi- EmptyFileFilter 193*0c4d7b72SSadaf Ebrahimi - New IOFileFilter implementation 194*0c4d7b72SSadaf Ebrahimi - Accepts files or directories that are empty 195*0c4d7b72SSadaf Ebrahimi - Singleton instances provided (EMPTY/NOT_EMPTY) 196*0c4d7b72SSadaf Ebrahimi 197*0c4d7b72SSadaf Ebrahimi- TrueFileFilter/FalseFileFilter/DirectoryFileFilter 198*0c4d7b72SSadaf Ebrahimi - New singleton instance constants (TRUE/FALSE/DIRECTORY) 199*0c4d7b72SSadaf Ebrahimi - The new constants are more JDK 1.5 friendly with regards to static imports 200*0c4d7b72SSadaf Ebrahimi (whereas if everything uses INSTANCE, then they just clash) 201*0c4d7b72SSadaf Ebrahimi - The old INSTANCE constants are still present and have not been deprecated 202*0c4d7b72SSadaf Ebrahimi 203*0c4d7b72SSadaf Ebrahimi- FileFilterUtils.sizeRangeFileFilter 204*0c4d7b72SSadaf Ebrahimi - new sizeRangeFileFilter(long minimumSize, long maximumSize) method which 205*0c4d7b72SSadaf Ebrahimi creates a filter that accepts files within the specified size range. 206*0c4d7b72SSadaf Ebrahimi 207*0c4d7b72SSadaf Ebrahimi- FileFilterUtils.makeDirectoryOnly/makeFileOnly 208*0c4d7b72SSadaf Ebrahimi - two new methods that decorate a file filter to make it apply to 209*0c4d7b72SSadaf Ebrahimi directories only or files only 210*0c4d7b72SSadaf Ebrahimi 211*0c4d7b72SSadaf Ebrahimi- NullWriter 212*0c4d7b72SSadaf Ebrahimi - New writer that acts as a sink for all data, as per /dev/null 213*0c4d7b72SSadaf Ebrahimi 214*0c4d7b72SSadaf Ebrahimi- NullInputStream 215*0c4d7b72SSadaf Ebrahimi - New input stream that emulates a stream of a specified size 216*0c4d7b72SSadaf Ebrahimi 217*0c4d7b72SSadaf Ebrahimi- NullReader 218*0c4d7b72SSadaf Ebrahimi - New reader that emulates a reader of a specified size 219*0c4d7b72SSadaf Ebrahimi 220*0c4d7b72SSadaf Ebrahimi- ByteArrayOutputStream [IO-97] 221*0c4d7b72SSadaf Ebrahimi - Performance enhancements 222*0c4d7b72SSadaf Ebrahimi 223*0c4d7b72SSadaf Ebrahimi</source> 224*0c4d7b72SSadaf Ebrahimi</p> 225*0c4d7b72SSadaf Ebrahimi</section> 226*0c4d7b72SSadaf Ebrahimi 227*0c4d7b72SSadaf Ebrahimi</body> 228*0c4d7b72SSadaf Ebrahimi</document> 229