xref: /aosp_15_r20/external/apache-commons-io/src/site/xdoc/upgradeto1_3.xml (revision 0c4d7b72e49a04598d65c566f44504b95342d75a)
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