xref: /aosp_15_r20/external/apache-commons-io/RELEASE-NOTES.txt (revision 0c4d7b72e49a04598d65c566f44504b95342d75a)
1*0c4d7b72SSadaf EbrahimiApache Commons IO
2*0c4d7b72SSadaf EbrahimiVersion 2.15.0
3*0c4d7b72SSadaf EbrahimiRelease Notes
4*0c4d7b72SSadaf Ebrahimi
5*0c4d7b72SSadaf EbrahimiINTRODUCTION:
6*0c4d7b72SSadaf Ebrahimi
7*0c4d7b72SSadaf EbrahimiCommons IO is a package of Java utility classes like java.io.
8*0c4d7b72SSadaf EbrahimiClasses in this package are considered to be so standard and of such high
9*0c4d7b72SSadaf Ebrahimireuse as to justify existence in java.io.
10*0c4d7b72SSadaf Ebrahimi
11*0c4d7b72SSadaf EbrahimiThe Apache Commons IO library contains utility classes, stream implementations, file filters,
12*0c4d7b72SSadaf Ebrahimifile comparators, endian transformation classes, and much more.
13*0c4d7b72SSadaf Ebrahimi
14*0c4d7b72SSadaf EbrahimiJava 8 is required.
15*0c4d7b72SSadaf Ebrahimi
16*0c4d7b72SSadaf EbrahimiChanges in this version include:
17*0c4d7b72SSadaf Ebrahimi
18*0c4d7b72SSadaf EbrahimiNew features:
19*0c4d7b72SSadaf Ebrahimio           Add org.apache.commons.io.channels.FileChannels. Thanks to Gary Gregory.
20*0c4d7b72SSadaf Ebrahimio           Add RandomAccessFiles#contentEquals(RandomAccessFile, RandomAccessFile). Thanks to Gary Gregory.
21*0c4d7b72SSadaf Ebrahimio           Add RandomAccessFiles#reset(RandomAccessFile). Thanks to Gary Gregory.
22*0c4d7b72SSadaf Ebrahimio           Add PathUtilsContentEqualsBenchmark. Thanks to Gary Gregory.
23*0c4d7b72SSadaf Ebrahimio           Add org.apache.commons.io.StreamIterator. Thanks to Gary Gregory.
24*0c4d7b72SSadaf Ebrahimio           Add MessageDigestInputStream and deprecate MessageDigestCalculatingInputStream. Thanks to Gary Gregory.
25*0c4d7b72SSadaf Ebrahimi
26*0c4d7b72SSadaf EbrahimiFixed Bugs:
27*0c4d7b72SSadaf Ebrahimio IO-810:  XmlStreamReader encoding match RE is too strict. Thanks to Laurence Gonsalves.
28*0c4d7b72SSadaf Ebrahimio IO-810:  Javadoc in FileUtils does not reflect code for thrown exceptions. Thanks to Gregor Dschung, Gary Gregory.
29*0c4d7b72SSadaf Ebrahimio IO-812:  Javadoc should mention closing Streams based on file resources. Thanks to Adam Rauch, Gary Gregory.
30*0c4d7b72SSadaf Ebrahimio IO-811:  In tests, Files.walk() direct and indirect callers fail to close the returned Stream. Thanks to Adam Rauch, Gary Gregory.
31*0c4d7b72SSadaf Ebrahimio IO-811:  FileUtils.listFiles(File, String[], boolean) fails to close its internal Stream. Thanks to Adam Rauch, Gary Gregory.
32*0c4d7b72SSadaf Ebrahimio IO-811:  FileUtils.iterateFiles(File, String[], boolean) fails to close its internal Stream. Thanks to Adam Rauch, Gary Gregory.
33*0c4d7b72SSadaf Ebrahimio IO-811:  StreamIterator fails to close its internal Stream. Thanks to Adam Rauch, Gary Gregory.
34*0c4d7b72SSadaf Ebrahimio IO-814:  Don't throw UncheckedIOException #491. Thanks to Elliotte Rusty Harold, Gary Gregory.
35*0c4d7b72SSadaf Ebrahimio IO-414:  Don't write a BOM on every (or any) line #492. Thanks to Elliotte Rusty Harold, Gary Gregory.
36*0c4d7b72SSadaf Ebrahimio IO-814:  RandomAccessFileMode.create(Path) provides a better NullPointerException message. Thanks to Gary Gregory.
37*0c4d7b72SSadaf Ebrahimio           Improve performance of PathUtils.fileContentEquals(Path, Path, LinkOption[], OpenOption[]) by about 60%, see PathUtilsContentEqualsBenchmark. Thanks to Gary Gregory.
38*0c4d7b72SSadaf Ebrahimio           Improve performance of PathUtils.fileContentEquals(Path, Path) by about 60%, see PathUtilsContentEqualsBenchmark. Thanks to Gary Gregory.
39*0c4d7b72SSadaf Ebrahimio           Improve performance of FileUtils.contentEquals(File, File) by about 60%, see PathUtilsContentEqualsBenchmark. Thanks to Gary Gregory.
40*0c4d7b72SSadaf Ebrahimio           Remove unused test code #494. Thanks to Elliotte Rusty Harold.
41*0c4d7b72SSadaf Ebrahimio           [Javadoc] IOUtils#contentEquals does not throw NullPointerException #496. Thanks to sebbASF.
42*0c4d7b72SSadaf Ebrahimio           Fix CodeQL warnings in UnsynchronizedBufferedInputStream: Implicit narrowing conversion in compound assignment. Thanks to Gary Gregory.
43*0c4d7b72SSadaf Ebrahimio           MessageDigestCalculatingInputStream.MessageDigestMaintainingObserver.MessageDigestMaintainingObserver(MessageDigest) now throws a NullPointerException
44*0c4d7b72SSadaf Ebrahimi        if the MessageDigest is null. Thanks to Gary Gregory.
45*0c4d7b72SSadaf Ebrahimio           MessageDigestCalculatingInputStream.MessageDigestCalculatingInputStream(InputStream, MessageDigest) now throws a NullPointerException
46*0c4d7b72SSadaf Ebrahimi        if the MessageDigest is null. Thanks to Gary Gregory.
47*0c4d7b72SSadaf Ebrahimio IO-816:  UnsynchronizedBufferedInputStream.read(byte[], int, int) does not use buffer. Thanks to Andreas Loth, Gary Gregory.
48*0c4d7b72SSadaf Ebrahimi
49*0c4d7b72SSadaf EbrahimiChanges:
50*0c4d7b72SSadaf Ebrahimio           Bump org.apache.commons:commons-parent from 62 to 64. Thanks to Gary Gregory.
51*0c4d7b72SSadaf Ebrahimi
52*0c4d7b72SSadaf EbrahimiCompatibility with 2.6:
53*0c4d7b72SSadaf EbrahimiBinary compatible: Yes.
54*0c4d7b72SSadaf EbrahimiSource compatible: Yes.
55*0c4d7b72SSadaf EbrahimiSemantic compatible: Yes.
56*0c4d7b72SSadaf Ebrahimi
57*0c4d7b72SSadaf EbrahimiCommons IO 2.9.0 requires Java 8.
58*0c4d7b72SSadaf EbrahimiCommons IO 2.8.0 requires Java 8.
59*0c4d7b72SSadaf EbrahimiCommons IO 2.7 requires Java 8.
60*0c4d7b72SSadaf EbrahimiCommons IO 2.6 requires Java 7.
61*0c4d7b72SSadaf EbrahimiCommons IO 2.5 requires Java 6.
62*0c4d7b72SSadaf EbrahimiCommons IO 2.4 requires Java 6.
63*0c4d7b72SSadaf EbrahimiCommons IO 2.3 requires Java 6.
64*0c4d7b72SSadaf EbrahimiCommons IO 2.2 requires Java 5.
65*0c4d7b72SSadaf EbrahimiCommons IO 1.4 requires Java 1.3.
66*0c4d7b72SSadaf Ebrahimi
67*0c4d7b72SSadaf EbrahimiHistorical list of changes: https://commons.apache.org/proper/commons-io/changes-report.html
68*0c4d7b72SSadaf Ebrahimi
69*0c4d7b72SSadaf EbrahimiFor complete information on Apache Commons IO, including instructions on how to submit bug reports,
70*0c4d7b72SSadaf Ebrahimipatches, or suggestions for improvement, see the Apache Commons IO website:
71*0c4d7b72SSadaf Ebrahimi
72*0c4d7b72SSadaf Ebrahimihttps://commons.apache.org/proper/commons-io/
73*0c4d7b72SSadaf Ebrahimi
74*0c4d7b72SSadaf EbrahimiDownload page: https://commons.apache.org/proper/commons-io/download_io.cgi
75*0c4d7b72SSadaf Ebrahimi
76*0c4d7b72SSadaf EbrahimiHave fun!
77*0c4d7b72SSadaf Ebrahimi-Apache Commons Team
78*0c4d7b72SSadaf Ebrahimi
79*0c4d7b72SSadaf Ebrahimi==============================================================================
80*0c4d7b72SSadaf Ebrahimi
81*0c4d7b72SSadaf EbrahimiApache Commons IO
82*0c4d7b72SSadaf EbrahimiVersion 2.14.0
83*0c4d7b72SSadaf EbrahimiRelease Notes
84*0c4d7b72SSadaf Ebrahimi
85*0c4d7b72SSadaf EbrahimiINTRODUCTION:
86*0c4d7b72SSadaf Ebrahimi
87*0c4d7b72SSadaf EbrahimiCommons IO is a package of Java utility classes like java.io.
88*0c4d7b72SSadaf EbrahimiClasses in this package are considered to be so standard and of such high
89*0c4d7b72SSadaf Ebrahimireuse as to justify existence in java.io.
90*0c4d7b72SSadaf Ebrahimi
91*0c4d7b72SSadaf EbrahimiThe Apache Commons IO library contains utility classes, stream implementations, file filters,
92*0c4d7b72SSadaf Ebrahimifile comparators, endian transformation classes, and much more.
93*0c4d7b72SSadaf Ebrahimi
94*0c4d7b72SSadaf EbrahimiJava 8 required.
95*0c4d7b72SSadaf Ebrahimi
96*0c4d7b72SSadaf EbrahimiChanges in this version include:
97*0c4d7b72SSadaf Ebrahimi
98*0c4d7b72SSadaf EbrahimiNew features:
99*0c4d7b72SSadaf Ebrahimio           Add DeferredFileOutputStream.getPath(). Thanks to Gary Gregory.
100*0c4d7b72SSadaf Ebrahimio           Add FileCleaningTracker.track(Path, Object[, FileDeleteStrategy]). Thanks to Gary Gregory.
101*0c4d7b72SSadaf Ebrahimio           Add IOUtils.skip[Fully](InputStream, long, Supplier<byte[]>). Thanks to Gary Gregory.
102*0c4d7b72SSadaf Ebrahimio           Add FilesUncheck.find(Path, int, BiPredicate%lt;Path, BasicFileAttributes>, FileVisitOption...) Thanks to Gary Gregory.
103*0c4d7b72SSadaf Ebrahimio           Add IOIntSupplier. Thanks to Gary Gregory.
104*0c4d7b72SSadaf Ebrahimio           Add IOLongSupplier. Thanks to Gary Gregory.
105*0c4d7b72SSadaf Ebrahimio           Add Uncheck.getAsInt(IOIntSupplier [, Supplier<String>]). Thanks to Gary Gregory.
106*0c4d7b72SSadaf Ebrahimio           Add Uncheck.getAsLong(IOLongSupplier [, Supplier<String>]). Thanks to Gary Gregory.
107*0c4d7b72SSadaf Ebrahimio           Add Uncheck.run(IORunnable, Supplier<String>) Thanks to Gary Gregory.
108*0c4d7b72SSadaf Ebrahimio           Add Uncheck.get(IOSupplier, Supplier<String>) Thanks to Gary Gregory.
109*0c4d7b72SSadaf Ebrahimio           IOFileFilter now also extends java.nio.file.PathMatcher. Thanks to Gary Gregory.
110*0c4d7b72SSadaf Ebrahimio           Add PathMatcherFileFilter to adapt java.nio.file.PathMatcher. Thanks to Gary Gregory.
111*0c4d7b72SSadaf Ebrahimio           Add ThresholdingOutputStream.getOutputStream() and deprecate getStream(). Thanks to Gary Gregory.
112*0c4d7b72SSadaf Ebrahimio           Add DeferredFileOutputStream.Builder.setOutputFile(Path). Thanks to Gary Gregory.
113*0c4d7b72SSadaf Ebrahimio           Add DeferredFileOutputStream.Builder.setDirectory(Path). Thanks to Gary Gregory.
114*0c4d7b72SSadaf Ebrahimio           Add AbstractStreamBuilder.setBufferSizeChecker(IntToIntFunction). Thanks to Gary Gregory.
115*0c4d7b72SSadaf Ebrahimio           Add AbstractStreamBuilder.setBufferSizeMax(int). Thanks to Gary Gregory.
116*0c4d7b72SSadaf Ebrahimi
117*0c4d7b72SSadaf EbrahimiFixed Bugs:
118*0c4d7b72SSadaf Ebrahimio IO-799:  ReaderInputStream.read() throws an exception instead of returning -1 when called again after returning -1. Thanks to Jeroen van der Vegt, Gary Gregory.
119*0c4d7b72SSadaf Ebrahimio IO-804:  FileUtils.forceMkdirParent() Javadoc is incorrect. Thanks to Elliotte Rusty Harold, Gary Gregory.
120*0c4d7b72SSadaf Ebrahimio           [StepSecurity] ci: Harden GitHub Actions #461. Thanks to step-security-bot, Gary Gregory.
121*0c4d7b72SSadaf Ebrahimio           MagicNumberFileFilter.accept(Path, BasicFileAttributes) doesn't its byteOffset before reading. Thanks to Gary Gregory.
122*0c4d7b72SSadaf Ebrahimio           Javadoc improvements. Thanks to Gary Gregory.
123*0c4d7b72SSadaf Ebrahimio           Spelling #468. Thanks to Josh Soref, Gary Gregory.
124*0c4d7b72SSadaf Ebrahimio           Use assertThrows #475. Thanks to Jakub Kupczyk.
125*0c4d7b72SSadaf Ebrahimi
126*0c4d7b72SSadaf EbrahimiChanges:
127*0c4d7b72SSadaf Ebrahimio           Bump jimfs from 1.2 to 1.3.0 #465 (tests). Thanks to Dependabot.
128*0c4d7b72SSadaf Ebrahimio           Bump commons-parent from 58 to 62. Thanks to Gary Gregory.
129*0c4d7b72SSadaf Ebrahimio           Bump commons-lang3 from 3.12 to 3.13.0. Thanks to Gary Gregory.
130*0c4d7b72SSadaf Ebrahimi
131*0c4d7b72SSadaf EbrahimiCompatibility with 2.6:
132*0c4d7b72SSadaf EbrahimiBinary compatible: Yes.
133*0c4d7b72SSadaf EbrahimiSource compatible: Yes.
134*0c4d7b72SSadaf EbrahimiSemantic compatible: Yes.
135*0c4d7b72SSadaf Ebrahimi
136*0c4d7b72SSadaf EbrahimiCommons IO 2.9.0 requires Java 8.
137*0c4d7b72SSadaf EbrahimiCommons IO 2.8.0 requires Java 8.
138*0c4d7b72SSadaf EbrahimiCommons IO 2.7 requires Java 8.
139*0c4d7b72SSadaf EbrahimiCommons IO 2.6 requires Java 7.
140*0c4d7b72SSadaf EbrahimiCommons IO 2.5 requires Java 6.
141*0c4d7b72SSadaf EbrahimiCommons IO 2.4 requires Java 6.
142*0c4d7b72SSadaf EbrahimiCommons IO 2.3 requires Java 6.
143*0c4d7b72SSadaf EbrahimiCommons IO 2.2 requires Java 5.
144*0c4d7b72SSadaf EbrahimiCommons IO 1.4 requires Java 1.3.
145*0c4d7b72SSadaf Ebrahimi
146*0c4d7b72SSadaf EbrahimiHistorical list of changes: https://commons.apache.org/proper/commons-io/changes-report.html
147*0c4d7b72SSadaf Ebrahimi
148*0c4d7b72SSadaf EbrahimiFor complete information on Apache Commons IO, including instructions on how to submit bug reports,
149*0c4d7b72SSadaf Ebrahimipatches, or suggestions for improvement, see the Apache Commons IO website:
150*0c4d7b72SSadaf Ebrahimi
151*0c4d7b72SSadaf Ebrahimihttps://commons.apache.org/proper/commons-io/
152*0c4d7b72SSadaf Ebrahimi
153*0c4d7b72SSadaf EbrahimiDownload page: https://commons.apache.org/proper/commons-io/download_io.cgi
154*0c4d7b72SSadaf Ebrahimi
155*0c4d7b72SSadaf EbrahimiHave fun!
156*0c4d7b72SSadaf Ebrahimi-Apache Commons Team
157*0c4d7b72SSadaf Ebrahimi
158*0c4d7b72SSadaf Ebrahimi==============================================================================
159*0c4d7b72SSadaf Ebrahimi
160*0c4d7b72SSadaf EbrahimiApache Commons IO
161*0c4d7b72SSadaf EbrahimiVersion 2.13.0
162*0c4d7b72SSadaf EbrahimiRelease Notes
163*0c4d7b72SSadaf Ebrahimi
164*0c4d7b72SSadaf EbrahimiINTRODUCTION:
165*0c4d7b72SSadaf Ebrahimi
166*0c4d7b72SSadaf EbrahimiCommons IO is a package of Java utility classes like java.io.
167*0c4d7b72SSadaf EbrahimiClasses in this package are considered to be so standard and of such high
168*0c4d7b72SSadaf Ebrahimireuse as to justify existence in java.io.
169*0c4d7b72SSadaf Ebrahimi
170*0c4d7b72SSadaf EbrahimiThe Apache Commons IO library contains utility classes, stream implementations, file filters,
171*0c4d7b72SSadaf Ebrahimifile comparators, endian transformation classes, and much more.
172*0c4d7b72SSadaf Ebrahimi
173*0c4d7b72SSadaf EbrahimiJava 8 required.
174*0c4d7b72SSadaf Ebrahimi
175*0c4d7b72SSadaf EbrahimiChanges in this version include:
176*0c4d7b72SSadaf Ebrahimi
177*0c4d7b72SSadaf EbrahimiNew features:
178*0c4d7b72SSadaf Ebrahimio           Add CharSequenceInputStream.Builder. Thanks to Gary Gregory.
179*0c4d7b72SSadaf Ebrahimio           Add ChunkedOutputStream.Builder. Thanks to Gary Gregory.
180*0c4d7b72SSadaf Ebrahimio           Add AbstractStreamBuilder.setOpenOptions(OpenOption...). Thanks to Gary Gregory.
181*0c4d7b72SSadaf Ebrahimio           Add some missing conversions to AbstractOrigin subclasses. Thanks to Gary Gregory.
182*0c4d7b72SSadaf Ebrahimio           Add AbstractOrigin.getByteArray(long, int). Thanks to Gary Gregory.
183*0c4d7b72SSadaf Ebrahimio           Add and use RandomAccessFiles. Thanks to Gary Gregory.
184*0c4d7b72SSadaf Ebrahimio           Add AbstractOrigin.size(). Thanks to Gary Gregory.
185*0c4d7b72SSadaf Ebrahimio           Add PathUtils.EMPTY_FILE_ATTRIBUTE_ARRAY. Thanks to Gary Gregory.
186*0c4d7b72SSadaf Ebrahimio           Add CharSequenceInputStream.Builder.setCharsetEncoder(CharsetEncoder). Thanks to Gary Gregory.
187*0c4d7b72SSadaf Ebrahimio           Add CharsetEncoders.toCharsetEncoder(CharsetEncoder, Supplier<CharsetEncoder>). Thanks to Gary Gregory.
188*0c4d7b72SSadaf Ebrahimi
189*0c4d7b72SSadaf EbrahimiFixed Bugs:
190*0c4d7b72SSadaf Ebrahimio IO-791:  Regression in FileUtils.touch() - no longer creates parent directories. Thanks to Chad Wilson, Gary Gregory.
191*0c4d7b72SSadaf Ebrahimio           ByteArrayOrigin should be able convert a byte[] to a ByteArrayInputStream. Thanks to Gary Gregory.
192*0c4d7b72SSadaf Ebrahimio           AbstractOriginSupplier.checkOrigin() now throws IllegalStateException instead of NullPointerException. Thanks to Gary Gregory.
193*0c4d7b72SSadaf Ebrahimio IO-796:  FileAlreadyExistsException in PathUtils.createParentDirectories(Path, LinkOption, FileAttribute...). Thanks to Giacomo Boccardo, Gary Gregory.
194*0c4d7b72SSadaf Ebrahimio           Only read the relevant portion of a file in AbstractOrigin.FileOrigin.getByteArray(long, int) Thanks to Gary Gregory.
195*0c4d7b72SSadaf Ebrahimio           Only read the relevant portion of a file in AbstractOrigin.PathOrigin.getByteArray(long, int) Thanks to Gary Gregory.
196*0c4d7b72SSadaf Ebrahimio IO-798:  DeferredFileOutputStream throws exception when system temp dir is a symlink. Thanks to Shai Shapira, Gary Gregory.
197*0c4d7b72SSadaf Ebrahimio           ReaderInputStream.Builder.setCharsetEncoder(null) should reset to a default object, not throw an NPE. Thanks to Gary Gregory.
198*0c4d7b72SSadaf Ebrahimio           ReaderInputStream.Builder.setCharset(null) should reset to a default object, not throw an NPE. Thanks to Gary Gregory.
199*0c4d7b72SSadaf Ebrahimi
200*0c4d7b72SSadaf EbrahimiChanges:
201*0c4d7b72SSadaf Ebrahimio           Bump commons-parent from 57 to 58. Thanks to Gary Gregory, Dependabot.
202*0c4d7b72SSadaf Ebrahimi
203*0c4d7b72SSadaf EbrahimiCompatibility with 2.6:
204*0c4d7b72SSadaf EbrahimiBinary compatible: Yes.
205*0c4d7b72SSadaf EbrahimiSource compatible: Yes.
206*0c4d7b72SSadaf EbrahimiSemantic compatible: Yes.
207*0c4d7b72SSadaf Ebrahimi
208*0c4d7b72SSadaf EbrahimiCommons IO 2.9.0 requires Java 8.
209*0c4d7b72SSadaf EbrahimiCommons IO 2.8.0 requires Java 8.
210*0c4d7b72SSadaf EbrahimiCommons IO 2.7 requires Java 8.
211*0c4d7b72SSadaf EbrahimiCommons IO 2.6 requires Java 7.
212*0c4d7b72SSadaf EbrahimiCommons IO 2.5 requires Java 6.
213*0c4d7b72SSadaf EbrahimiCommons IO 2.4 requires Java 6.
214*0c4d7b72SSadaf EbrahimiCommons IO 2.3 requires Java 6.
215*0c4d7b72SSadaf EbrahimiCommons IO 2.2 requires Java 5.
216*0c4d7b72SSadaf EbrahimiCommons IO 1.4 requires Java 1.3.
217*0c4d7b72SSadaf Ebrahimi
218*0c4d7b72SSadaf EbrahimiHistorical list of changes: https://commons.apache.org/proper/commons-io/changes-report.html
219*0c4d7b72SSadaf Ebrahimi
220*0c4d7b72SSadaf EbrahimiFor complete information on Apache Commons IO, including instructions on how to submit bug reports,
221*0c4d7b72SSadaf Ebrahimipatches, or suggestions for improvement, see the Apache Commons IO website:
222*0c4d7b72SSadaf Ebrahimi
223*0c4d7b72SSadaf Ebrahimihttps://commons.apache.org/proper/commons-io/
224*0c4d7b72SSadaf Ebrahimi
225*0c4d7b72SSadaf EbrahimiDownload page: https://commons.apache.org/proper/commons-io/download_io.cgi
226*0c4d7b72SSadaf Ebrahimi
227*0c4d7b72SSadaf EbrahimiHave fun!
228*0c4d7b72SSadaf Ebrahimi-Apache Commons Team
229*0c4d7b72SSadaf Ebrahimi
230*0c4d7b72SSadaf EbrahimiApache Commons IO
231*0c4d7b72SSadaf EbrahimiVersion 2.12.0
232*0c4d7b72SSadaf EbrahimiRelease Notes
233*0c4d7b72SSadaf Ebrahimi
234*0c4d7b72SSadaf Ebrahimi==============================================================================
235*0c4d7b72SSadaf Ebrahimi
236*0c4d7b72SSadaf EbrahimiINTRODUCTION:
237*0c4d7b72SSadaf Ebrahimi
238*0c4d7b72SSadaf EbrahimiCommons IO is a package of Java utility classes like java.io.
239*0c4d7b72SSadaf EbrahimiClasses in this package are considered to be so standard and of such high
240*0c4d7b72SSadaf Ebrahimireuse as to justify existence in java.io.
241*0c4d7b72SSadaf Ebrahimi
242*0c4d7b72SSadaf EbrahimiThe Apache Commons IO library contains utility classes, stream implementations, file filters,
243*0c4d7b72SSadaf Ebrahimifile comparators, endian transformation classes, and much more.
244*0c4d7b72SSadaf Ebrahimi
245*0c4d7b72SSadaf EbrahimiJava 8 required.
246*0c4d7b72SSadaf Ebrahimi
247*0c4d7b72SSadaf EbrahimiChanges in this version include:
248*0c4d7b72SSadaf Ebrahimi
249*0c4d7b72SSadaf EbrahimiNew features:
250*0c4d7b72SSadaf Ebrahimio IO-746:  Drop unnecessary casts and conversions #267. Thanks to Davide Angelocola.
251*0c4d7b72SSadaf Ebrahimio           Add GitHub coverage.yml. Thanks to Gary Gregory.
252*0c4d7b72SSadaf Ebrahimio           Add BrokenReader.INSTANCE. Thanks to Gary Gregory.
253*0c4d7b72SSadaf Ebrahimio           Add UncheckedBufferedReader. Thanks to Gary Gregory.
254*0c4d7b72SSadaf Ebrahimio           Add UncheckedFilterReader. Thanks to Gary Gregory.
255*0c4d7b72SSadaf Ebrahimio           Add UncheckedFilterWriter. Thanks to Gary Gregory.
256*0c4d7b72SSadaf Ebrahimio           Add StringInputStream. Thanks to Gary Gregory.
257*0c4d7b72SSadaf Ebrahimio           Add UncheckedFilterInputStream. Thanks to Gary Gregory.
258*0c4d7b72SSadaf Ebrahimio           Add UncheckedFilterOutputStream. Thanks to Gary Gregory.
259*0c4d7b72SSadaf Ebrahimio           Add BrokenInputStream.INSTANCE. Thanks to Gary Gregory.
260*0c4d7b72SSadaf Ebrahimio           Add ClosedInputStream.INSTANCE and deprecate CLOSED_INPUT_STREAM. Thanks to Gary Gregory.
261*0c4d7b72SSadaf Ebrahimio           Add ClosedReader.INSTANCE and deprecate CLOSED_READER. Thanks to Gary Gregory.
262*0c4d7b72SSadaf Ebrahimio           Add BrokenWriter.INSTANCE. Thanks to Gary Gregory.
263*0c4d7b72SSadaf Ebrahimio           Add ClosedOutputStream.INSTANCE and deprecate CLOSED_OUTPUT_STREAM. Thanks to Gary Gregory.
264*0c4d7b72SSadaf Ebrahimio           Add ClosedWriter.INSTANCE and deprecate CLOSED_WRITER. Thanks to Gary Gregory.
265*0c4d7b72SSadaf Ebrahimio           Add NullOutputStream.INSTANCE and deprecate NULL_OUTPUT_STREAM. Thanks to Gary Gregory.
266*0c4d7b72SSadaf Ebrahimio           Add NullPrintStream.INSTANCE and deprecate NULL_PRINT_STREAM. Thanks to Gary Gregory.
267*0c4d7b72SSadaf Ebrahimio           Add NullWriter.INSTANCE and deprecate NULL_WRITER. Thanks to Gary Gregory.
268*0c4d7b72SSadaf Ebrahimio           Add NullInputStream.INSTANCE. Thanks to Gary Gregory.
269*0c4d7b72SSadaf Ebrahimio           Add NullReader.INSTANCE. Thanks to Gary Gregory.
270*0c4d7b72SSadaf Ebrahimio           Add PathUtils.readString(Path, Charset). Thanks to Gary Gregory.
271*0c4d7b72SSadaf Ebrahimio           Add FileUtils.newOutputStream(File, boolean). Thanks to Gary Gregory.
272*0c4d7b72SSadaf Ebrahimio           Add PathUtils.newOutputStream(Path, boolean). Thanks to Gary Gregory.
273*0c4d7b72SSadaf Ebrahimio           Add UncheckedAppendable. Thanks to Gary Gregory.
274*0c4d7b72SSadaf Ebrahimio           Add and reuse UncheckedIOExceptions. Thanks to Gary Gregory.
275*0c4d7b72SSadaf Ebrahimio           Add PathUtils.getTempDirectory(). Thanks to Gary Gregory.
276*0c4d7b72SSadaf Ebrahimio           Add FileSystem.getNameSeparator(). Thanks to Gary Gregory.
277*0c4d7b72SSadaf Ebrahimio           Add FileSystem.normalizeSeparators(). Thanks to Gary Gregory.
278*0c4d7b72SSadaf Ebrahimio           Add PathUtils.isNewer(Path, FileTime, LinkOption...). Thanks to Gary Gregory.
279*0c4d7b72SSadaf Ebrahimio           Add PathUtils.isNewer(Path, Instant, LinkOption...). Thanks to Gary Gregory.
280*0c4d7b72SSadaf Ebrahimio           Add AgeFileFilter.AgeFileFilter(Instant).
281*0c4d7b72SSadaf Ebrahimi        Add AgeFileFilter.AgeFileFilter(Instant, boolean). Thanks to Gary Gregory.
282*0c4d7b72SSadaf Ebrahimio           Add FileUtils.lastModifiedFileTime(File). Thanks to Gary Gregory.
283*0c4d7b72SSadaf Ebrahimio           Add FileTimes. Thanks to Gary Gregory.
284*0c4d7b72SSadaf Ebrahimio           Add PathUtils.waitFor(Path, Duration, LinkOption...). Thanks to Gary Gregory.
285*0c4d7b72SSadaf Ebrahimio           Add org.apache.commons.io.input.Tailer.getDelayDuration(). Thanks to Gary Gregory.
286*0c4d7b72SSadaf Ebrahimio           Add FileUtils.current(). Thanks to Gary Gregory.
287*0c4d7b72SSadaf Ebrahimio           Add and use PathUtils.setLastModifiedTime(Path) for more precision.
288*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.setLastModifiedTime(Path, Path) for more precision. Thanks to Gary Gregory.
289*0c4d7b72SSadaf Ebrahimio           Add and use PathUtils.isNewer(Path, ChronoZonedDateTime, LinkOption...) for more precision.
290*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.isNewer(Path, Path) for more precision.
291*0c4d7b72SSadaf Ebrahimi        Add and use FileUtils.isNewer(File, FileTime) for more precision. Thanks to Gary Gregory.
292*0c4d7b72SSadaf Ebrahimio           Add and use PathUtils.isOlder(Path, FileTime, LinkOption...).
293*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.isOlder(Path, Instant, LinkOption...).
294*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.isOlder(Path, long, LinkOption...).
295*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.isOlder(Path, Path). Thanks to Gary Gregory.
296*0c4d7b72SSadaf Ebrahimio           Add and use PathUtils.sizeOf(Path).
297*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.sizeOfAsBigInteger(Path).
298*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.sizeOfDirectory(Path).
299*0c4d7b72SSadaf Ebrahimi        Add and use PathUtils.sizeOfDirectoryAsBigInteger(Path). Thanks to Gary Gregory.
300*0c4d7b72SSadaf Ebrahimio           Add and use IOCase.value(IOCase, IOCase). Thanks to Gary Gregory.
301*0c4d7b72SSadaf Ebrahimio           Add Tailer.Tailable interface to allow tailing of remote files for example using jCIFS. Thanks to Jon Freedman, Gary Gregory.
302*0c4d7b72SSadaf Ebrahimio           Add and use RandomAccessFileMode. Thanks to Gary Gregory.
303*0c4d7b72SSadaf Ebrahimio           Add PathUtils.writeString(Path, CharSequence, Charset, OpenOption...). Thanks to Gary Gregory.
304*0c4d7b72SSadaf Ebrahimio           Add PathUtiFiles.getFileAttributeView() shorthands:
305*0c4d7b72SSadaf Ebrahimi          - PathUtils.getAclFileAttributeView(Path, LinkOption...)
306*0c4d7b72SSadaf Ebrahimi          - PathUtils.getDosFileAttributeView(Path, LinkOption...)
307*0c4d7b72SSadaf Ebrahimi          - PathUtils.getPosixFileAttributeView(Path, LinkOption...) Thanks to Gary Gregory.
308*0c4d7b72SSadaf Ebrahimio IO-747:  Make commons-io a JPMS module by adding module-info.class.
309*0c4d7b72SSadaf Ebrahimio IO-753:  Add IOUtils method to copy output stream to input stream #281. Thanks to SebastianDietrich, Gary Gregory.
310*0c4d7b72SSadaf Ebrahimio           Add PathUtils.isPosix(Path, LinkOption...). #290 Thanks to Gary Gregory.
311*0c4d7b72SSadaf Ebrahimio           Add PathUtils.readAttributes(Path, Class, LinkOption...). #290 Thanks to Gary Gregory.
312*0c4d7b72SSadaf Ebrahimio           Add IOExceptionList.checkEmpty(List, Object). Thanks to Gary Gregory.
313*0c4d7b72SSadaf Ebrahimio           Add IOBiConsumer, IOTriConsumer, IOComparator, IOUnaryOperator, IOBinaryOperator. Thanks to Gary Gregory.
314*0c4d7b72SSadaf Ebrahimio           Add and reuse IOConsumer forAll(*), forEach(*), and forEachIndexed(*). Thanks to Gary Gregory.
315*0c4d7b72SSadaf Ebrahimio           Add CharsetEncoders. Thanks to Gary Gregory.
316*0c4d7b72SSadaf Ebrahimio           Add CharsetDecoders. Thanks to Gary Gregory.
317*0c4d7b72SSadaf Ebrahimio           Add PathUtils.createParentDirectories(Path, LinkOption, FileAttribute...). Thanks to Gary Gregory.
318*0c4d7b72SSadaf Ebrahimio           Update FileEntry to use FileTime instead of long for file time stamps. Thanks to Gary Gregory.
319*0c4d7b72SSadaf Ebrahimio IO-680:  Add more tests for IOUtils.contentEqualsIgnoreEOL #137. Thanks to XenoAmess, sebbASF, Gary Gregory.
320*0c4d7b72SSadaf Ebrahimio           Reduce boilerplate through new UncheckedIO class and friends in org.apache.commons.io.function. Thanks to Gary Gregory.
321*0c4d7b72SSadaf Ebrahimio           Add PathUtils.touch(Path). Thanks to Gary Gregory.
322*0c4d7b72SSadaf Ebrahimio           Add FileSystem.getIllegalFileNameCodePoints(). Thanks to Gary Gregory.
323*0c4d7b72SSadaf Ebrahimio           Add FileUtils.isFileNewer(File, ChronoLocalDate, OffsetTime).
324*0c4d7b72SSadaf Ebrahimi        Add FileUtils.isFileNewer(File, OffsetDateTime).
325*0c4d7b72SSadaf Ebrahimi        Add FileUtils.isFileOlder(File, ChronoLocalDate, OffsetTime).
326*0c4d7b72SSadaf Ebrahimi        Add FileUtils.isFileOlder(File, OffsetDateTime). Thanks to Isira Seneviratne, Gary Gregory.
327*0c4d7b72SSadaf Ebrahimio           Add IOBiConsumer.noop(). Thanks to Gary Gregory.
328*0c4d7b72SSadaf Ebrahimio           Add IOUtils.closeQuietly(Iterable<Closeable>).
329*0c4d7b72SSadaf Ebrahimi        Add IOUtils.closeQuietly(Stream<Closeable>). Thanks to Gary Gregory.
330*0c4d7b72SSadaf Ebrahimio           Add Charsets.toCharset(Charset, Charset).
331*0c4d7b72SSadaf Ebrahimi        Add Charsets.toCharset(String, Charset). Thanks to Gary Gregory.
332*0c4d7b72SSadaf Ebrahimio           Add XmlStreamWriter(OutputStream, Charset). Thanks to Gary Gregory.
333*0c4d7b72SSadaf Ebrahimio           Add PathUtils.getLastModifiedFileTime(*). Thanks to Gary Gregory.
334*0c4d7b72SSadaf Ebrahimio           Add IOBiFunction, IOTriFunction, IOQuadFunction, IOPredicate, IOIterator, IOSpliterator, IOBaseStream, IOStream, FilesUncheck. Thanks to Gary Gregory.
335*0c4d7b72SSadaf Ebrahimio           Add IOUtils.consume(Reader). Thanks to Gary Gregory.
336*0c4d7b72SSadaf Ebrahimio           Add IOSupplier.asSupplier(). Thanks to Gary Gregory.
337*0c4d7b72SSadaf Ebrahimio           Add IOFunction.asFunction(). Thanks to Gary Gregory.
338*0c4d7b72SSadaf Ebrahimio           Add IOConsumer.asConsumer(). Thanks to Gary Gregory.
339*0c4d7b72SSadaf Ebrahimio           Add TimestampedObserver.isClosed(). Thanks to Gary Gregory.
340*0c4d7b72SSadaf Ebrahimio           IOExceptionList implements Iterable. Thanks to Gary Gregory.
341*0c4d7b72SSadaf Ebrahimio IO-784:  Add support for Appendable to HexDump #418. Thanks to Fredrik Kjellberg, Gary Gregory.
342*0c4d7b72SSadaf Ebrahimio           Add and use ThreadUtils. Thanks to DaGeRe, Gary Gregory.
343*0c4d7b72SSadaf Ebrahimio IO-786:  Add UnsynchronizedFilterInputStream. Thanks to Gary Gregory.
344*0c4d7b72SSadaf Ebrahimio IO-786:  Add UnsynchronizedBufferedInputStream. Thanks to Gary Gregory, Benoit Tellier.
345*0c4d7b72SSadaf Ebrahimio           Add FileSystem.getBlockSize(). Thanks to Gary Gregory.
346*0c4d7b72SSadaf Ebrahimio           Add builders and avoid creating more constructors for all permutations of current options. Thanks to Gary Gregory.
347*0c4d7b72SSadaf Ebrahimio           Refactor using new Supplier API IOUtils.toString(IOSupplier<InputStream>, Charset[, IOSupplier<String>]). Thanks to Gary Gregory, maxxedev.
348*0c4d7b72SSadaf Ebrahimio           Refactor using new Supplier API org.apache.commons.io.file.PathUtils.copy(IOSupplier<InputStream>, Path, CopyOption...). Thanks to Gary Gregory, maxxedev.
349*0c4d7b72SSadaf Ebrahimi
350*0c4d7b72SSadaf EbrahimiFixed Bugs:
351*0c4d7b72SSadaf Ebrahimio IO-697:  IOUtils.toByteArray size validation does not match documentation. Thanks to otter606.
352*0c4d7b72SSadaf Ebrahimio           Fix Javadoc links to the JRE Javadoc 8. Thanks to Gary Gregory.
353*0c4d7b72SSadaf Ebrahimio IO-744:  FileWriterWithEncoding for an existing file no longer truncates the file. #251. Thanks to RBRi, Gary Gregory.
354*0c4d7b72SSadaf Ebrahimio           A null Charset or Charset name in FileWriterWithEncoding constructors uses the default Charset. Thanks to Gary Gregory.
355*0c4d7b72SSadaf Ebrahimio           Fix usage of assertNotNull #269. Thanks to Davide Angelocola.
356*0c4d7b72SSadaf Ebrahimio IO-727:  FilenameUtils directoryContains() should handle files with the same prefix #217. Thanks to trungPa, Gary Gregory.
357*0c4d7b72SSadaf Ebrahimio IO-748:  FileUtils.moveToDirectory() exception documentation and exception message error. Thanks to Dirk Heinrichs, Gary Gregory, Elango Ravi.
358*0c4d7b72SSadaf Ebrahimio           ThreadMonitor.sleep(Duration) ignores nanoseconds. Thanks to Gary Gregory.
359*0c4d7b72SSadaf Ebrahimio           Fix Javadoc in ThreadMonitor#run() method. #273. Thanks to Arturo Bernal.
360*0c4d7b72SSadaf Ebrahimio IO-749:  FileUtils.listFiles() does not list matching files if File parameter is a symbolic link. Thanks to haihuiyang, Gary Gregory.
361*0c4d7b72SSadaf Ebrahimio           Fix typo in Javadocs for FileUtils#convertFileCollectionToFileArray() #276. Thanks to niranjanghule, Gary Gregory.
362*0c4d7b72SSadaf Ebrahimio           Avoid Code Duplication: Reuse Sleep from ThreadMonitor #66. Thanks to DaGeRe, Gary Gregory.
363*0c4d7b72SSadaf Ebrahimio IO-750:  FileUtils.iterateFiles also lists directories. Thanks to Sita Ge�ner, Sebastian Peters, Gary Gregory.
364*0c4d7b72SSadaf Ebrahimio IO-721:  Wrong exception message in FileUtils.setLastModified(File, File). Thanks to Dirk Heinrichs, Gary Gregory.
365*0c4d7b72SSadaf Ebrahimio IO-717:  Infinite loop in ReaderInputStream instead of throwing exception for CodingErrorAction.REPORT. Thanks to Marcono1234, Gary Gregory.
366*0c4d7b72SSadaf Ebrahimio IO-716:  ReaderInputStream enter infinite loop for too small buffer sizes. Thanks to Marcono1234, Gary Gregory.
367*0c4d7b72SSadaf Ebrahimio IO-638:  Infinite loop in CharSequenceInputStream.read for 4-byte characters with UTF-8 and 3-byte buffer. Thanks to Thayne McCombs, Gary Gregory.
368*0c4d7b72SSadaf Ebrahimio IO-638:  PathUtils.setReadOnly(Path, boolean, LinkOption...) should add READ_* file attributes when using POSIX. Thanks to Gary Gregory.
369*0c4d7b72SSadaf Ebrahimio IO-638:  PathUtils.setReadOnly(Path, boolean, LinkOption...) readOnly argument is always assumed true on POSIX. Thanks to Gary Gregory.
370*0c4d7b72SSadaf Ebrahimio IO-729:  Prevent IllegalArgumentExceptions in BrokenInputStream/Reader/OutputStream/Writer #278. Thanks to Rob Spoor, Gary Gregory.
371*0c4d7b72SSadaf Ebrahimio           FileUtils.copyURLToFile(URL, File, int, int) leaks its URLConnection.
372*0c4d7b72SSadaf Ebrahimi        Called by FileUtils.copyURLToFile(URL, File). Thanks to Gary Gregory.
373*0c4d7b72SSadaf Ebrahimio IO-714:  Fixed ReaderInputStream not calling CharsetEncoder.flush issue #283. Thanks to kevinwang1975, Gary Gregory.
374*0c4d7b72SSadaf Ebrahimio           Minor changes #287. Thanks to Arturo Bernal.
375*0c4d7b72SSadaf Ebrahimio IO-756:  Update FileWriterWithEncoding to extend ProxyWriter #296. Thanks to wodencafe, Gary Gregory, Bruno P. Kinoshita.
376*0c4d7b72SSadaf Ebrahimio           Initialize the message of an IOExceptionList to a default if null. Thanks to Gary Gregory.
377*0c4d7b72SSadaf Ebrahimio IO-751:  When deleting symlinks, File/PathUtils.deleteDirectory() changes file permissions of the target. Thanks to Gary Gregory, Richard Cyganiak.
378*0c4d7b72SSadaf Ebrahimio           ReaderInputStream maps null Charset, Charset name, and CharsetEncoder to the platform default instead of throwing a NullPointerException. Thanks to Gary Gregory.
379*0c4d7b72SSadaf Ebrahimio           CharSequenceInputStream maps null Charset and Charset name to the platform default instead of throwing a NullPointerException. Thanks to Gary Gregory.
380*0c4d7b72SSadaf Ebrahimio           WriterOutputStream maps null Charset, Charset name, and CharsetEncoder name to the platform default instead of throwing a NullPointerException. Thanks to Gary Gregory.
381*0c4d7b72SSadaf Ebrahimio           FileUtils.copyURLToFile should create target parent directories and overwrite target file #319. Thanks to Chad Wilson, Gary Gregory.
382*0c4d7b72SSadaf Ebrahimio IO-484:  Fix incorrect FilenameUtils Javadoc for null bytes #310. Thanks to Marcono1234, Gary Gregory.
383*0c4d7b72SSadaf Ebrahimio IO-484:  Change to uppercase variable constant. #323. Thanks to Arturo Bernal.
384*0c4d7b72SSadaf Ebrahimio IO-484:  IOCase.isCaseSensitive(IOCase) result is backward #325. Thanks to David Huang, Gary Gregory.
385*0c4d7b72SSadaf Ebrahimio IO-758:  Deprecate PathUtils.NOFOLLOW_LINK_OPTION_ARRAY in favor of noFollowLinkOptionArray(). Thanks to Marcono1234, Gary Gregory.
386*0c4d7b72SSadaf Ebrahimio           Improve ReaderInputStream documentation #291. Thanks to Marcono1234, Gary Gregory.
387*0c4d7b72SSadaf Ebrahimio           Fix misleading comments in FileFilterTest #334. Thanks to richarda23.
388*0c4d7b72SSadaf Ebrahimio           Add missing Javadoc for exceptions thrown for invalid arguments #339. Thanks to Diego Marcilio.
389*0c4d7b72SSadaf Ebrahimio           FileFilterTest minor fixes #340. Thanks to richarda23.
390*0c4d7b72SSadaf Ebrahimio IO-764:  IOUtils.write() throws OutOfMemoryError/NegativeArraySizeException while writing big strings #343. Thanks to DaGeRe, Gary Gregory.
391*0c4d7b72SSadaf Ebrahimio IO-768:  Add reserved Windows file names CONIN$ and CONOUT$ to FileSystem #355. Thanks to Marcono1234, Michael Osipov.
392*0c4d7b72SSadaf Ebrahimio IO-773:  RegexFileFilter is no longer Serializable. Thanks to Dominik Reinarz, Gary Gregory.
393*0c4d7b72SSadaf Ebrahimio IO-763:  [Javadoc] FileFilterUtils doc does not match impl: missing some file filters. Thanks to Richard Adams, Gary Gregory.
394*0c4d7b72SSadaf Ebrahimio IO-762:  FileSystem.WINDOWS.isReservedFileName doesn't check for file extension. Thanks to Leonidas Chiron, Gary Gregory.
395*0c4d7b72SSadaf Ebrahimio IO-772:  Confusing Javadoc on IOUtils#resourceToURL() and other resource* methods. Thanks to Dan Ziemba, Gary Gregory.
396*0c4d7b72SSadaf Ebrahimio IO-443:  FileUtils.copyFile methods throw an unnecessary "Failed to copy full contents from" exception. Thanks to Dan Ziemba, Gary Gregory.
397*0c4d7b72SSadaf Ebrahimio IO-564:  Pick up Javadoc from super for override write() methods in AbstractByteArrayOutputStream and ByteArrayOutputStream. Thanks to Hao Zhong, Bernd Eckenfels, Pascal Schumacher, Gary Gregory.
398*0c4d7b72SSadaf Ebrahimio           Fix minor typos #367. Thanks to Marc Wrobel.
399*0c4d7b72SSadaf Ebrahimio IO-776:  Fix parameters to requireNonNull call in DeferredOutputSteam #368. Thanks to Chris Povirk.
400*0c4d7b72SSadaf Ebrahimio           Fix PathUtils.copyFileToDirectory(URL,Path,CopyOption[]). Thanks to Gary Gregory.
401*0c4d7b72SSadaf Ebrahimio IO-386:  FileUtils.doCopyFile uses different methods to check the file sizes. Thanks to Sebb, Bernd Eckenfels, zhipengxu, Gary Gregory.
402*0c4d7b72SSadaf Ebrahimio           Fix typos #375. Thanks to Michael Ernst.
403*0c4d7b72SSadaf Ebrahimio IO-611:  FilenameUtils.normalize javadoc and tests #383. Thanks to Fedor Urvanov.
404*0c4d7b72SSadaf Ebrahimio IO-611:  Better docs in IOUtils and IOUtils.byteArray(int size) #374. Thanks to ArdenL-Liu, Bruno P. Kinoshita, Gary Gregory.
405*0c4d7b72SSadaf Ebrahimio IO-782:  SequenceReader should close readers when its close method is called #391. Thanks to Matteo Di Giovinazzo, Gary Gregory.
406*0c4d7b72SSadaf Ebrahimio IO-790:  Fix symbolic link file filter #450. Thanks to Miguel Mu�oz, Gary Gregory.
407*0c4d7b72SSadaf Ebrahimio IO-790:  Apply nanoseconds precision for QueueInputStream timeout duration. #453. Thanks to maxxedev, Gary Gregory, Bruno P. Kinoshita.
408*0c4d7b72SSadaf Ebrahimio           Fix overflow for FileUtilsTest constants #456. Thanks to Marcono1234.
409*0c4d7b72SSadaf Ebrahimio           Serialization is deprecated and will be removed in 3.0. Thanks to Gary Gregory.
410*0c4d7b72SSadaf Ebrahimio           FileSystemUtils.performCommand(String[], int, Duration): Use Locale.getDefault() instead of ENGLISH. Thanks to Gary Gregory.
411*0c4d7b72SSadaf Ebrahimio IO-726:  Add MemoryMappedFileInputStream #215. Thanks to shollander, Gary Gregory.
412*0c4d7b72SSadaf Ebrahimi
413*0c4d7b72SSadaf EbrahimiChanges:
414*0c4d7b72SSadaf Ebrahimio           Bump actions/cache from 2.1.6 to 3.0.10 #307, #337, #393. Thanks to Dependabot, Gary Gregory.
415*0c4d7b72SSadaf Ebrahimio           Bump actions/checkout from 2.3.4 to 3.1.0 #286, #298, #330, #392. Thanks to Dependabot, Gary Gregory.
416*0c4d7b72SSadaf Ebrahimio           Bump actions/setup-java from 2 to 3.6.0 #346, #397. Thanks to Dependabot.
417*0c4d7b72SSadaf Ebrahimio           Bump github/codeql-action from 1 to 2 #353. Thanks to Dependabot.
418*0c4d7b72SSadaf Ebrahimio           Bump Maven Javadoc plugin from 3.2.0 to 3.4.1. Thanks to Dependabot, Gary Gregory.
419*0c4d7b72SSadaf Ebrahimio           Bump spotbugs-maven-plugin from 4.2.3 to 4.7.3.0 #250, #259, #272, #274, #285, #288, #289, #305, #315, #326, #338, #360, #366, #370, #380, #395, #403. Thanks to Dependabot.
420*0c4d7b72SSadaf Ebrahimio           Bump spotbugs from 4.5.2 to 4.7.3 #313, #317, #357, #382, #398. Thanks to Gary Gregory, Dependabot.
421*0c4d7b72SSadaf Ebrahimio           Bump JUnit from 5.7.2 to 5.8.2. Thanks to Gary Gregory.
422*0c4d7b72SSadaf Ebrahimio           Bump maven-enforcer-plugin from 3.0.0-M3 to 3.3.0 #255, #363, #431, #446. Thanks to Dependabot.
423*0c4d7b72SSadaf Ebrahimio           Bump checkstyle from 8.44 to 9.3 #256, #257, #266, #279, #292. #308. Thanks to Dependabot, Gary Gregory.
424*0c4d7b72SSadaf Ebrahimio           Bump junit-bom from 5.8.0-M1 to 5.9.1 #260, #271, #275, #309, #386. Thanks to Dependabot.
425*0c4d7b72SSadaf Ebrahimio           Bump mockito-inline from 3.11.2 to 4.11.0 #262, #264, #282, #306, #314, #331, #348, #359, #381, #399, #405, #414, #420. Thanks to Dependabot, Gary Gregory.
426*0c4d7b72SSadaf Ebrahimio           Bump jmh.version from 1.32 to 1.36 #258, #316, #342, #404. Thanks to Dependabot.
427*0c4d7b72SSadaf Ebrahimio           Bump moditect-maven-plugin from 1.0.0.RC1 to 1.0.0.Final #280, #439, #445. Thanks to Dependabot.
428*0c4d7b72SSadaf Ebrahimio           Bump junit-pioneer from 1.4.2 to 1.9.1 #304. #335, #362, #402, #406, #409. Thanks to Dependabot, Gary Gregory.
429*0c4d7b72SSadaf Ebrahimio           Bump japicmp-maven-plugin from 0.15.3 to 0.16.0. Thanks to Gary Gregory.
430*0c4d7b72SSadaf Ebrahimio           Bump commons-parent from 52 to 57 #388, #415, #421, #184. Thanks to Gary Gregory, Dependabot.
431*0c4d7b72SSadaf Ebrahimio           Bump jacoco-maven-plugin from 0.8.7 to 0.8.8. Thanks to Gary Gregory.
432*0c4d7b72SSadaf Ebrahimio           Bump maven-antrun-plugin from 3.0.0 to 3.1.0 #354. Thanks to Dependabot.
433*0c4d7b72SSadaf Ebrahimio           Bump commons.surefire.version 3.0.0-M5 to 3.0.0-M7. Thanks to Gary Gregory.
434*0c4d7b72SSadaf Ebrahimio           Bump PMD from 6.44.0 to 6.52.0. Thanks to Gary Gregory.
435*0c4d7b72SSadaf Ebrahimio           Bump maven-pmd-plugin from 3.16.0 to 3.19.0. Thanks to Gary Gregory.
436*0c4d7b72SSadaf Ebrahimio           Bump apache-rat from 0.13 to 0.14. Thanks to Gary Gregory.
437*0c4d7b72SSadaf Ebrahimio           Bump exec-maven-plugin from 3.0.0 to 3.1.0 #369. Thanks to Dependabot.
438*0c4d7b72SSadaf Ebrahimio           Bump maven-checkstyle-plugin from 3.1.2 to 3.2.0 #376. Thanks to Dependabot.
439*0c4d7b72SSadaf Ebrahimio           Bump apache-rat-plugin from 0.14 to 0.15 #387. Thanks to Dependabot.
440*0c4d7b72SSadaf Ebrahimio           Bump default buffer size for CharSequenceInputStream to IOUtils#DEFAULT_BUFFER_SIZE. Thanks to Gary Gregory.
441*0c4d7b72SSadaf Ebrahimio           Bump default buffer size for ChunkedOutputStream to IOUtils#DEFAULT_BUFFER_SIZE. Thanks to Gary Gregory.
442*0c4d7b72SSadaf Ebrahimio           Bump default buffer size for ChunkedWriter to IOUtils#DEFAULT_BUFFER_SIZE. Thanks to Gary Gregory.
443*0c4d7b72SSadaf Ebrahimio           Bump default buffer size for ReaderInputStream to IOUtils#DEFAULT_BUFFER_SIZE. Thanks to Gary Gregory.
444*0c4d7b72SSadaf Ebrahimio           Bump default buffer size for WriterOutputStream to IOUtils#DEFAULT_BUFFER_SIZE. Thanks to Gary Gregory.
445*0c4d7b72SSadaf Ebrahimi
446*0c4d7b72SSadaf EbrahimiCompatibility with 2.6:
447*0c4d7b72SSadaf EbrahimiBinary compatible: Yes.
448*0c4d7b72SSadaf EbrahimiSource compatible: Yes.
449*0c4d7b72SSadaf EbrahimiSemantic compatible: Yes.
450*0c4d7b72SSadaf Ebrahimi
451*0c4d7b72SSadaf EbrahimiCommons IO 2.9.0 requires Java 8.
452*0c4d7b72SSadaf EbrahimiCommons IO 2.8.0 requires Java 8.
453*0c4d7b72SSadaf EbrahimiCommons IO 2.7 requires Java 8.
454*0c4d7b72SSadaf EbrahimiCommons IO 2.6 requires Java 7.
455*0c4d7b72SSadaf EbrahimiCommons IO 2.5 requires Java 6.
456*0c4d7b72SSadaf EbrahimiCommons IO 2.4 requires Java 6.
457*0c4d7b72SSadaf EbrahimiCommons IO 2.3 requires Java 6.
458*0c4d7b72SSadaf EbrahimiCommons IO 2.2 requires Java 5.
459*0c4d7b72SSadaf EbrahimiCommons IO 1.4 requires Java 1.3.
460*0c4d7b72SSadaf Ebrahimi
461*0c4d7b72SSadaf EbrahimiHistorical list of changes: https://commons.apache.org/proper/commons-io/changes-report.html
462*0c4d7b72SSadaf Ebrahimi
463*0c4d7b72SSadaf EbrahimiFor complete information on Apache Commons IO, including instructions on how to submit bug reports,
464*0c4d7b72SSadaf Ebrahimipatches, or suggestions for improvement, see the Apache Commons IO website:
465*0c4d7b72SSadaf Ebrahimi
466*0c4d7b72SSadaf Ebrahimihttps://commons.apache.org/proper/commons-io/
467*0c4d7b72SSadaf Ebrahimi
468*0c4d7b72SSadaf EbrahimiDownload page: https://commons.apache.org/proper/commons-io/download_io.cgi
469*0c4d7b72SSadaf Ebrahimi
470*0c4d7b72SSadaf EbrahimiHave fun!
471*0c4d7b72SSadaf Ebrahimi-Apache Commons Team
472*0c4d7b72SSadaf Ebrahimi
473*0c4d7b72SSadaf Ebrahimi==============================================================================
474*0c4d7b72SSadaf Ebrahimi
475*0c4d7b72SSadaf EbrahimiApache Commons IO
476*0c4d7b72SSadaf EbrahimiVersion 2.11.0
477*0c4d7b72SSadaf EbrahimiRelease Notes
478*0c4d7b72SSadaf Ebrahimi
479*0c4d7b72SSadaf EbrahimiINTRODUCTION:
480*0c4d7b72SSadaf Ebrahimi
481*0c4d7b72SSadaf EbrahimiCommons IO is a package of Java utility classes like java.io.
482*0c4d7b72SSadaf EbrahimiClasses in this package are considered to be so standard and of such high
483*0c4d7b72SSadaf Ebrahimireuse as to justify existence in java.io.
484*0c4d7b72SSadaf Ebrahimi
485*0c4d7b72SSadaf EbrahimiThe Apache Commons IO library contains utility classes, stream implementations, file filters,
486*0c4d7b72SSadaf Ebrahimifile comparators, endian transformation classes, and much more.
487*0c4d7b72SSadaf Ebrahimi
488*0c4d7b72SSadaf EbrahimiJava 8 required.
489*0c4d7b72SSadaf Ebrahimi
490*0c4d7b72SSadaf EbrahimiChanges in this version include:
491*0c4d7b72SSadaf Ebrahimi
492*0c4d7b72SSadaf Ebrahimi
493*0c4d7b72SSadaf EbrahimiFixed Bugs:
494*0c4d7b72SSadaf Ebrahimio IO-741:  FileUtils.listFiles does not list matching files if File parameter is a symbolic link. Thanks to Zach Sherman.
495*0c4d7b72SSadaf Ebrahimio IO-724:  FileUtils#deleteDirectory(File) exception Javadoc inaccurate update #245. Thanks to liran2000.
496*0c4d7b72SSadaf Ebrahimio          Minor changes #243. Thanks to Arturo Bernal.
497*0c4d7b72SSadaf Ebrahimio          Replace construction of FileInputStream and FileOutputStream objects with Files NIO APIs. #221. Thanks to Arturo Bernal.
498*0c4d7b72SSadaf Ebrahimio          Fix IndexOutOfBoundsException in IOExceptionList constructors. Thanks to Gary Gregory.
499*0c4d7b72SSadaf Ebrahimio          Remove IOException from the method signatures that no longer throw IOException.
500*0c4d7b72SSadaf Ebrahimi           This maintains binary compatibility but not source compatibility.
501*0c4d7b72SSadaf Ebrahimi           - FilenameUtils
502*0c4d7b72SSadaf Ebrahimi               directoryContains(String, String)
503*0c4d7b72SSadaf Ebrahimi           - BoundedReader
504*0c4d7b72SSadaf Ebrahimi               BoundedReader(java.io.Reader, int)
505*0c4d7b72SSadaf Ebrahimi           - IOUtils
506*0c4d7b72SSadaf Ebrahimi               lineIterator(java.io.InputStream, Charset)
507*0c4d7b72SSadaf Ebrahimi               lineIterator(java.io.InputStream, String)
508*0c4d7b72SSadaf Ebrahimi               toByteArray(String)
509*0c4d7b72SSadaf Ebrahimi               toInputStream(CharSequence, String)
510*0c4d7b72SSadaf Ebrahimi               toInputStream(String, String)
511*0c4d7b72SSadaf Ebrahimi               toString(byte[])
512*0c4d7b72SSadaf Ebrahimi               toString(byte[], String) Thanks to Gary Gregory.
513*0c4d7b72SSadaf Ebrahimi
514*0c4d7b72SSadaf EbrahimiChanges:
515*0c4d7b72SSadaf Ebrahimio          Add SymbolicLinkFileFilter. Thanks to Gary Gregory.
516*0c4d7b72SSadaf Ebrahimio          Add test to make sure the setter of AndFileFilter works correctly #244. Thanks to trncate.
517*0c4d7b72SSadaf Ebrahimio          Add XmlStreamReader(Path). Thanks to Gary Gregory.
518*0c4d7b72SSadaf Ebrahimio          Bump mockito-inline from 3.11.0 to 3.11.2 #247. Thanks to Dependabot.
519*0c4d7b72SSadaf Ebrahimio          Bump jmh.version from 1.27 to 1.32 #237. Thanks to Dependabot.
520*0c4d7b72SSadaf Ebrahimio          Bump spotbugs from 4.2.3 to 4.3.0 #249. Thanks to Dependabot.
521*0c4d7b72SSadaf Ebrahimi
522*0c4d7b72SSadaf EbrahimiCompatibility with 2.6:
523*0c4d7b72SSadaf EbrahimiBinary compatible: Yes.
524*0c4d7b72SSadaf EbrahimiSource compatible: Yes.
525*0c4d7b72SSadaf EbrahimiSemantic compatible: Yes.
526*0c4d7b72SSadaf Ebrahimi
527*0c4d7b72SSadaf EbrahimiCommons IO 2.9.0 requires Java 8.
528*0c4d7b72SSadaf EbrahimiCommons IO 2.8.0 requires Java 8.
529*0c4d7b72SSadaf EbrahimiCommons IO 2.7 requires Java 8.
530*0c4d7b72SSadaf EbrahimiCommons IO 2.6 requires Java 7.
531*0c4d7b72SSadaf EbrahimiCommons IO 2.5 requires Java 6.
532*0c4d7b72SSadaf EbrahimiCommons IO 2.4 requires Java 6.
533*0c4d7b72SSadaf EbrahimiCommons IO 2.3 requires Java 6.
534*0c4d7b72SSadaf EbrahimiCommons IO 2.2 requires Java 5.
535*0c4d7b72SSadaf EbrahimiCommons IO 1.4 requires Java 1.3.
536*0c4d7b72SSadaf Ebrahimi
537*0c4d7b72SSadaf EbrahimiHistorical list of changes: https://commons.apache.org/proper/commons-io/changes-report.html
538*0c4d7b72SSadaf Ebrahimi
539*0c4d7b72SSadaf EbrahimiFor complete information on Apache Commons IO, including instructions on how to submit bug reports,
540*0c4d7b72SSadaf Ebrahimipatches, or suggestions for improvement, see the Apache Commons IO website:
541*0c4d7b72SSadaf Ebrahimi
542*0c4d7b72SSadaf Ebrahimihttps://commons.apache.org/proper/commons-io/
543*0c4d7b72SSadaf Ebrahimi
544*0c4d7b72SSadaf EbrahimiDownload page: https://commons.apache.org/proper/commons-io/download_io.cgi
545*0c4d7b72SSadaf Ebrahimi
546*0c4d7b72SSadaf EbrahimiHave fun!
547*0c4d7b72SSadaf Ebrahimi-Apache Commons Team
548*0c4d7b72SSadaf Ebrahimi
549*0c4d7b72SSadaf Ebrahimi==============================================================================
550*0c4d7b72SSadaf Ebrahimi
551*0c4d7b72SSadaf EbrahimiApache Commons IO
552*0c4d7b72SSadaf EbrahimiVersion 2.10.0
553*0c4d7b72SSadaf EbrahimiRelease Notes
554*0c4d7b72SSadaf Ebrahimi
555*0c4d7b72SSadaf EbrahimiINTRODUCTION:
556*0c4d7b72SSadaf Ebrahimi
557*0c4d7b72SSadaf EbrahimiCommons IO is a package of Java utility classes like java.io.
558*0c4d7b72SSadaf EbrahimiClasses in this package are considered to be so standard and of such high
559*0c4d7b72SSadaf Ebrahimireuse as to justify existence in java.io.
560*0c4d7b72SSadaf Ebrahimi
561*0c4d7b72SSadaf EbrahimiThe Apache Commons IO library contains utility classes, stream implementations, file filters,
562*0c4d7b72SSadaf Ebrahimifile comparators, endian transformation classes, and much more.
563*0c4d7b72SSadaf Ebrahimi
564*0c4d7b72SSadaf EbrahimiJava 8 required.
565*0c4d7b72SSadaf Ebrahimi
566*0c4d7b72SSadaf EbrahimiChanges in this version include:
567*0c4d7b72SSadaf Ebrahimi
568*0c4d7b72SSadaf EbrahimiNew features:
569*0c4d7b72SSadaf Ebrahimio           Add and use RegexFileFilter.toString(). Thanks to Gary Gregory.
570*0c4d7b72SSadaf Ebrahimio           Add and use RegexFileFilter.RegexFileFilter(Pattern, Function<Path>, String>) Thanks to Gary Gregory.
571*0c4d7b72SSadaf Ebrahimio           Add and use IOCase.isCaseSensitive(IOCase). Thanks to Gary Gregory.
572*0c4d7b72SSadaf Ebrahimi
573*0c4d7b72SSadaf EbrahimiFixed Bugs:
574*0c4d7b72SSadaf Ebrahimio IO-733:  RegexFileFilter uses the path and file name instead of just the file name. Thanks to Jim Sellers, Gary Gregory.
575*0c4d7b72SSadaf Ebrahimio IO-734:  The OSGi manifest now contains sun.* import packages #239. Thanks to Eric Norman.
576*0c4d7b72SSadaf Ebrahimio IO-585:  Sanitize double slash after prefix #79. Thanks to Adam McClenaghan.
577*0c4d7b72SSadaf Ebrahimi
578*0c4d7b72SSadaf EbrahimiChanges:
579*0c4d7b72SSadaf Ebrahimio           Bump actions/cache from 2.1.5 to 2.1.6 #238. Thanks to Dependabot.
580*0c4d7b72SSadaf Ebrahimio           Bump junit-pioneer from 1.4.1 to 1.4.2 #240. Thanks to Dependabot.
581*0c4d7b72SSadaf Ebrahimio           Bump checkstyle from 8.42 to 8.43 #241. Thanks to Dependabot.
582*0c4d7b72SSadaf Ebrahimio           Bump mockito-inline from 3.10.0 to 3.11.0 #242. Thanks to Dependabot.
583*0c4d7b72SSadaf Ebrahimi
584*0c4d7b72SSadaf EbrahimiCompatibility with 2.6:
585*0c4d7b72SSadaf EbrahimiBinary compatible: Yes.
586*0c4d7b72SSadaf EbrahimiSource compatible: Yes.
587*0c4d7b72SSadaf EbrahimiSemantic compatible: Yes.
588*0c4d7b72SSadaf Ebrahimi
589*0c4d7b72SSadaf EbrahimiCommons IO 2.9.0 requires Java 8.
590*0c4d7b72SSadaf EbrahimiCommons IO 2.8.0 requires Java 8.
591*0c4d7b72SSadaf EbrahimiCommons IO 2.7 requires Java 8.
592*0c4d7b72SSadaf EbrahimiCommons IO 2.6 requires Java 7.
593*0c4d7b72SSadaf EbrahimiCommons IO 2.5 requires Java 6.
594*0c4d7b72SSadaf EbrahimiCommons IO 2.4 requires Java 6.
595*0c4d7b72SSadaf EbrahimiCommons IO 2.3 requires Java 6.
596*0c4d7b72SSadaf EbrahimiCommons IO 2.2 requires Java 5.
597*0c4d7b72SSadaf EbrahimiCommons IO 1.4 requires Java 1.3.
598*0c4d7b72SSadaf Ebrahimi
599*0c4d7b72SSadaf EbrahimiHistorical list of changes: https://commons.apache.org/proper/commons-io/changes-report.html
600*0c4d7b72SSadaf Ebrahimi
601*0c4d7b72SSadaf EbrahimiFor complete information on Apache Commons IO, including instructions on how to submit bug reports,
602*0c4d7b72SSadaf Ebrahimipatches, or suggestions for improvement, see the Apache Commons IO website:
603*0c4d7b72SSadaf Ebrahimi
604*0c4d7b72SSadaf Ebrahimihttps://commons.apache.org/proper/commons-io/
605*0c4d7b72SSadaf Ebrahimi
606*0c4d7b72SSadaf EbrahimiDownload page: https://commons.apache.org/proper/commons-io/download_io.cgi
607*0c4d7b72SSadaf Ebrahimi
608*0c4d7b72SSadaf EbrahimiHave fun!
609*0c4d7b72SSadaf Ebrahimi-Apache Commons Team
610*0c4d7b72SSadaf Ebrahimi
611*0c4d7b72SSadaf Ebrahimi==============================================================================
612*0c4d7b72SSadaf Ebrahimi
613*0c4d7b72SSadaf EbrahimiApache Commons IO
614*0c4d7b72SSadaf EbrahimiVersion 2.8.0
615*0c4d7b72SSadaf EbrahimiRelease Notes
616*0c4d7b72SSadaf Ebrahimi
617*0c4d7b72SSadaf EbrahimiINTRODUCTION:
618*0c4d7b72SSadaf Ebrahimi
619*0c4d7b72SSadaf EbrahimiCommons IO is a package of Java utility classes like java.io.
620*0c4d7b72SSadaf EbrahimiClasses in this package are considered to be so standard and of such high
621*0c4d7b72SSadaf Ebrahimireuse as to justify existence in java.io.
622*0c4d7b72SSadaf Ebrahimi
623*0c4d7b72SSadaf EbrahimiThe Apache Commons IO library contains utility classes, stream implementations, file filters,
624*0c4d7b72SSadaf Ebrahimifile comparators, endian transformation classes, and much more.
625*0c4d7b72SSadaf Ebrahimi
626*0c4d7b72SSadaf EbrahimiJava 8 required.
627*0c4d7b72SSadaf Ebrahimi
628*0c4d7b72SSadaf EbrahimiChanges in this version include:
629*0c4d7b72SSadaf Ebrahimi
630*0c4d7b72SSadaf EbrahimiNew features:
631*0c4d7b72SSadaf Ebrahimio Add org.apache.commons.io.input.CircularInputStream. Thanks to Gary Gregory.
632*0c4d7b72SSadaf Ebrahimio Add org.apache.commons.io.file.PathUtils.cleanDirectory(Path, FileVisitOption...). Thanks to Gary Gregory.
633*0c4d7b72SSadaf Ebrahimio Add org.apache.commons.io.file.PathUtils.deleteDirectory(Path, FileVisitOption...). Thanks to Gary Gregory.
634*0c4d7b72SSadaf Ebrahimio Add NullAppendable. Thanks to Gary Gregory.
635*0c4d7b72SSadaf Ebrahimio Add PathUtils.getAclEntryList(Path). Thanks to Gary Gregory.
636*0c4d7b72SSadaf Ebrahimio Null-guard IOUtils.close(Closeable, IOConsumer). Thanks to Gary Gregory.
637*0c4d7b72SSadaf Ebrahimio Add ReversedLinesFileReader.readLines(int). Thanks to Gary Gregory.
638*0c4d7b72SSadaf Ebrahimio Add ReversedLinesFileReader.toString(int). Thanks to Gary Gregory.
639*0c4d7b72SSadaf Ebrahimio IO-684:  Add PathUtils.delete(Path, DeleteOption...).
640*0c4d7b72SSadaf Ebrahimi        Add PathUtils.deleteDirectory(Path, DeleteOption...).
641*0c4d7b72SSadaf Ebrahimi        Add PathUtils.deleteFile(Path, DeleteOption...).
642*0c4d7b72SSadaf Ebrahimi        Add PathUtils.setReadOnly(Path, boolean, LinkOption...).
643*0c4d7b72SSadaf Ebrahimi        Add CleaningPathVisitor.CleaningPathVisitor(PathCounters, DeleteOption[], String...).
644*0c4d7b72SSadaf Ebrahimi        Add DeletingPathVisitor.DeletingPathVisitor(PathCounters, DeleteOption[], String...). Thanks to Gary Gregory, Robin Jansohn.
645*0c4d7b72SSadaf Ebrahimio Add RandomAccessFileInputStream. Thanks to Gary Gregory.
646*0c4d7b72SSadaf Ebrahimio IO-681:  IOUtils.close(Closeable) should allow a list of closeables.
647*0c4d7b72SSadaf Ebrahimio Add IOUtils.consume(InputStream). Thanks to Gary Gregory.
648*0c4d7b72SSadaf Ebrahimio IO-676:  Add isFileNewer() and isFileOlder() methods that support the Java 8 Date/Time API. #124. Thanks to Isira Seneviratne, Gary Gregory.
649*0c4d7b72SSadaf Ebrahimio Add a MarkShieldInputStream #119. Thanks to Adam Retter, Gary Gregory.
650*0c4d7b72SSadaf Ebrahimio Deprecate IOUtils.LINE_SEPARATOR in favor of Java 7's System.lineSeparator(). Thanks to Gary Gregory.
651*0c4d7b72SSadaf Ebrahimi
652*0c4d7b72SSadaf EbrahimiFixed Bugs:
653*0c4d7b72SSadaf Ebrahimio CharSequenceReader.skip should return 0 instead of EOF on stream end #123. Thanks to Rob Spoor, Jochen Wiedmann.
654*0c4d7b72SSadaf Ebrahimio Implement CharSequenceReader.ready() #122. Thanks to Rob Spoor.
655*0c4d7b72SSadaf Ebrahimio IO-669:  Fix code smells; fix typos #115. Thanks to XenoAmess, Gary Gregory.
656*0c4d7b72SSadaf Ebrahimio Add caching for required charsets #120. Thanks to Jerome Wolff, Gary Gregory.
657*0c4d7b72SSadaf Ebrahimio IO-673:  Make some simplifications #121. Thanks to Jerome Wolff.
658*0c4d7b72SSadaf Ebrahimio IO-674:  InfiniteCircularInputStream is not infinite if its input buffer contains -1. Thanks to Gary Gregory.
659*0c4d7b72SSadaf Ebrahimio IO-675:  InfiniteCircularInputStream throws a divide-by-zero exception when reading if its input buffer is size 0. Thanks to Gary Gregory.
660*0c4d7b72SSadaf Ebrahimio IO-677:  FileSystem.getCurrent() does not return the correct enum. Thanks to Gary Gregory.
661*0c4d7b72SSadaf Ebrahimio IO-679:  input.AbstractCharacterFilterReader passes count of chars read #132. Thanks to proneel.
662*0c4d7b72SSadaf Ebrahimio IO-683:  CircularBufferInputStream.read() fails to convert byte to unsigned int
663*0c4d7b72SSadaf Ebrahimio Fix SpotBugs issues in org.apache.commons.io.FileUtils. Thanks to Gary Gregory.
664*0c4d7b72SSadaf Ebrahimio IO-672:  Copying a File sets last modified date to 01 January 1970.
665*0c4d7b72SSadaf Ebrahimio IO-676:  Prevent NullPointerException in ReversedLinesFileReader constructors #117. Thanks to Michael Ernst, Gary Gregory.
666*0c4d7b72SSadaf Ebrahimi
667*0c4d7b72SSadaf EbrahimiChanges:
668*0c4d7b72SSadaf Ebrahimio Replace FindBugs with SpotBugs. Thanks to Gary Gregory.
669*0c4d7b72SSadaf Ebrahimio maven-checkstyle-plugin 3.1.0 -> 3.1.1. Thanks to Gary Gregory.
670*0c4d7b72SSadaf Ebrahimio Update tests from org.apache.commons:commons-lang3 3.10 to 3.11. Thanks to Gary Gregory.
671*0c4d7b72SSadaf Ebrahimio Update commons-parent from 50 to 51 #129. Thanks to Gary Gregory.
672*0c4d7b72SSadaf Ebrahimio Update actions/checkout from v1 to v2.3.1 #126. Thanks to Gary Gregory.
673*0c4d7b72SSadaf Ebrahimio Update junit-pioneer from 0.6.0 to 0.8.0, #127, #135. Thanks to Gary Gregory.
674*0c4d7b72SSadaf Ebrahimio Update mockito-core from 3.3.3 to 3.5.9 #128, #133, #145, #149, #151. Thanks to Gary Gregory.
675*0c4d7b72SSadaf Ebrahimio Update spotbugs from 4.0.6 to 4.1.1 #134. Thanks to Dependabot.
676*0c4d7b72SSadaf Ebrahimio Update junit-pioneer from 0.8.0 to 0.9.0 #138. Thanks to Dependabot.
677*0c4d7b72SSadaf Ebrahimio Update actions/checkout from v2.3.1 to v2.3.2 #140. Thanks to Dependabot.
678*0c4d7b72SSadaf Ebrahimio Update actions/setup-java from v1.4.0 to v1.4.2 #141, #148. Thanks to Dependabot.
679*0c4d7b72SSadaf Ebrahimi
680*0c4d7b72SSadaf EbrahimiCompatibility with 2.7:
681*0c4d7b72SSadaf EbrahimiBinary compatible: Yes.
682*0c4d7b72SSadaf EbrahimiSource compatible: Yes.
683*0c4d7b72SSadaf EbrahimiSemantic compatible: Yes.
684*0c4d7b72SSadaf Ebrahimi
685*0c4d7b72SSadaf EbrahimiCommons IO 2.7 requires Java 8.
686*0c4d7b72SSadaf EbrahimiCommons IO 2.6 requires Java 7.
687*0c4d7b72SSadaf EbrahimiCommons IO 2.5 requires Java 6.
688*0c4d7b72SSadaf EbrahimiCommons IO 2.4 requires Java 6.
689*0c4d7b72SSadaf EbrahimiCommons IO 2.3 requires Java 6.
690*0c4d7b72SSadaf EbrahimiCommons IO 2.2 requires Java 5.
691*0c4d7b72SSadaf EbrahimiCommons IO 1.4 requires Java 1.3.
692*0c4d7b72SSadaf Ebrahimi
693*0c4d7b72SSadaf EbrahimiHistorical list of changes: https://commons.apache.org/proper/commons-io/changes-report.html
694*0c4d7b72SSadaf Ebrahimi
695*0c4d7b72SSadaf EbrahimiFor complete information on Apache Commons IO, including instructions on how to submit bug reports,
696*0c4d7b72SSadaf Ebrahimipatches, or suggestions for improvement, see the Apache Commons IO website:
697*0c4d7b72SSadaf Ebrahimi
698*0c4d7b72SSadaf Ebrahimihttps://commons.apache.org/proper/commons-io/
699*0c4d7b72SSadaf Ebrahimi
700*0c4d7b72SSadaf EbrahimiDownload page: https://commons.apache.org/proper/commons-io/download_io.cgi
701*0c4d7b72SSadaf Ebrahimi
702*0c4d7b72SSadaf EbrahimiHave fun!
703*0c4d7b72SSadaf Ebrahimi-Apache Commons Team
704*0c4d7b72SSadaf Ebrahimi
705*0c4d7b72SSadaf Ebrahimi==============================================================================
706*0c4d7b72SSadaf Ebrahimi
707*0c4d7b72SSadaf EbrahimiApache Commons IO
708*0c4d7b72SSadaf EbrahimiVersion 2.7
709*0c4d7b72SSadaf EbrahimiRelease Notes
710*0c4d7b72SSadaf Ebrahimi
711*0c4d7b72SSadaf EbrahimiINTRODUCTION:
712*0c4d7b72SSadaf Ebrahimi
713*0c4d7b72SSadaf EbrahimiCommons IO is a package of Java utility classes like java.io.
714*0c4d7b72SSadaf EbrahimiClasses in this package are considered to be so standard and of such high
715*0c4d7b72SSadaf Ebrahimireuse as to justify existence in java.io.
716*0c4d7b72SSadaf Ebrahimi
717*0c4d7b72SSadaf EbrahimiThe Apache Commons IO library contains utility classes, stream implementations, file filters,
718*0c4d7b72SSadaf Ebrahimifile comparators, endian transformation classes, and much more.
719*0c4d7b72SSadaf Ebrahimi
720*0c4d7b72SSadaf EbrahimiJava 8 required.
721*0c4d7b72SSadaf Ebrahimi
722*0c4d7b72SSadaf EbrahimiChanges in this version include:
723*0c4d7b72SSadaf Ebrahimi
724*0c4d7b72SSadaf EbrahimiNew features:
725*0c4d7b72SSadaf Ebrahimio           Adding the CircularBufferInputStream, and the PeekableInputStream.
726*0c4d7b72SSadaf Ebrahimio IO-553:  Add org.apache.commons.io.FilenameUtils.isIllegalWindowsFileName(char).
727*0c4d7b72SSadaf Ebrahimio IO-577:  Add readers to filter out given characters: CharacterSetFilterReader and CharacterFilterReader. Thanks to Gary Gregory.
728*0c4d7b72SSadaf Ebrahimio IO-594:  Add IOUtils copy methods with java.lang.Appendable as the target. Thanks to Gary Gregory.
729*0c4d7b72SSadaf Ebrahimio IO-605:  Add class CanExecuteFileFilter. Thanks to Gary Gregory.
730*0c4d7b72SSadaf Ebrahimio IO-578:  Support java.nio.Path and non-default file systems for ReversedLinesFileReader (#62). Thanks to Mark Chesney.
731*0c4d7b72SSadaf Ebrahimio IO-608:  Add a convenience NullPrintStream. Thanks to Gary Gregory.
732*0c4d7b72SSadaf Ebrahimio IO-612:  Add class TeeReader. Thanks to Rob Spoor, Gary Gregory.
733*0c4d7b72SSadaf Ebrahimio IO-613:  Add classes ClosedReader and CloseShieldReader. #84. Thanks to Rob Spoor, Gary Gregory.
734*0c4d7b72SSadaf Ebrahimio IO-614:  Add classes TaggedWriter, ClosedWriter and BrokenWriter. #86. Thanks to Rob Spoor.
735*0c4d7b72SSadaf Ebrahimio IO-615:  Add classes TeeWriter, FilterCollectionWriter, ProxyCollectionWriter, IOExceptionList, IOIndexedException. Thanks to Gary Gregory, Rob Spoor.
736*0c4d7b72SSadaf Ebrahimio IO-616:  Add class AppendableWriter. #87. Thanks to Rob Spoor.
737*0c4d7b72SSadaf Ebrahimio IO-617:  Add class CloseShieldWriter. #83. Thanks to Rob Spoor, Gary Gregory.
738*0c4d7b72SSadaf Ebrahimio IO-618:  Add classes Added TaggedReader, ClosedReader and BrokenReader. #85. Thanks to Rob Spoor.
739*0c4d7b72SSadaf Ebrahimio IO-619:  Support sub sequences in CharSequenceReader. #91. Thanks to Rob Spoor.
740*0c4d7b72SSadaf Ebrahimio IO-631:  Add a CountingFileVisitor (as the basis for a forthcoming DeletingFileVisitor). Thanks to Gary Gregory.
741*0c4d7b72SSadaf Ebrahimio IO-632:  Add PathUtils for operations on NIO Path. Thanks to Gary Gregory.
742*0c4d7b72SSadaf Ebrahimio IO-633:  Add DeletingFileVisitor. Thanks to Gary Gregory.
743*0c4d7b72SSadaf Ebrahimio IO-635:  Add org.apache.commons.io.IOUtils.close(Closeable). Thanks to Gary Gregory.
744*0c4d7b72SSadaf Ebrahimio IO-636:  Add and reuse org.apache.commons.io.IOUtils.closeQuitely(Closeable, Consumer<IOException>).
745*0c4d7b72SSadaf Ebrahimi           Add and reuse org.apache.commons.io.IOUtils.close(Closeable, IOConsumer<IOException>). Thanks to Gary Gregory.
746*0c4d7b72SSadaf Ebrahimio IO-645:  Add org.apache.commons.io.file.PathUtils.fileContentEquals(Path, Path, OpenOption...). Thanks to Gary Gregory.
747*0c4d7b72SSadaf Ebrahimio IO-458:  Add a SequenceReader similar to java.io.SequenceInputStream. Thanks to Gary Gregory, Joshua Gitlin.
748*0c4d7b72SSadaf Ebrahimio IO-648:  Implement directory content equality. 100#. Thanks to Gary Gregory.
749*0c4d7b72SSadaf Ebrahimio IO-648:  Refactor ByteArrayOutputStream into synchronized and unsynchronized versions #108. Thanks to Adam Retter, Alex Herbert, Gary Gregory.
750*0c4d7b72SSadaf Ebrahimio IO-662:  Refactor ByteArrayOutputStream into synchronized and unsynchronized versions #108. Thanks to Adam Retter, Gary Gregory.
751*0c4d7b72SSadaf Ebrahimi
752*0c4d7b72SSadaf EbrahimiFixed Bugs:
753*0c4d7b72SSadaf Ebrahimio IO-589:  Some tests fail if the base path contains a space.
754*0c4d7b72SSadaf Ebrahimio IO-582:  Make methods in ObservableInputStream.Observer public. Thanks to Bruno Palos.
755*0c4d7b72SSadaf Ebrahimio IO-535:  Thread bug in FileAlterationMonitor.stop(int). Thanks to Svetlin Zarev, Anthony Raymond.
756*0c4d7b72SSadaf Ebrahimio IO-557:  Perform locale independent upper case conversions. Thanks to luccioman.
757*0c4d7b72SSadaf Ebrahimio IO-570:  Missing Javadoc in FilenameUtils causing Travis-CI build to fail. Thanks to Pranet Verma.
758*0c4d7b72SSadaf Ebrahimio IO-571:  Remove redundant isDirectory() check in org.apache.commons.io.FileUtils.listFilesAndDirs(File, IOFileFilter, IOFileFilter). Thanks to pranet.
759*0c4d7b72SSadaf Ebrahimio IO-559:  FilenameUtils.normalize now verifies hostname syntax in UNC path.
760*0c4d7b72SSadaf Ebrahimio IO-554:  FileUtils.copyToFile(InputStream source, File destination) should not close input stream. Thanks to Michele Mariotti.
761*0c4d7b72SSadaf Ebrahimio IO-604:  FileUtils.doCopyFile(File, File, boolean) can throw ClosedByInterruptException. Thanks to Gary Gregory.
762*0c4d7b72SSadaf Ebrahimio IO-625:  Corrected misleading exception message for FileUtils.copyDirectoryToDirectory. Thanks to Mikko Maunu.
763*0c4d7b72SSadaf Ebrahimio IO-626:  A mistake in the FilenameUtils.concat()'s Javadoc about an absolute path. Thanks to Yuji Konishi.
764*0c4d7b72SSadaf Ebrahimio IO-640:  NPE in org.apache.commons.io.IOUtils.contentEquals(InputStream, InputStream) when only one input is null. Thanks to Gary Gregory.
765*0c4d7b72SSadaf Ebrahimio IO-641:  NPE in org.apache.commons.io.IOUtils.contentEquals(Reader, Reader) when only one input is null. Thanks to Gary Gregory.
766*0c4d7b72SSadaf Ebrahimio IO-643:  NPE in org.apache.commons.io.IOUtils.contentEqualsIgnoreEOL(Reader, Reader) when only one input is null. Thanks to Gary Gregory.
767*0c4d7b72SSadaf Ebrahimio IO-644:  NPE in org.apache.commons.io.FileUtils.contentEqualsIgnoreEOL(File, File) when only one input is null. Thanks to Gary Gregory.
768*0c4d7b72SSadaf Ebrahimio IO-664:  org.apache.commons.io.FileUtils.copyURLToFile(*) open but do not close streams. Thanks to Gary Gregory.
769*0c4d7b72SSadaf Ebrahimi
770*0c4d7b72SSadaf EbrahimiChanges:
771*0c4d7b72SSadaf Ebrahimio IO-572:  Refactor duplicate code in org.apache.commons.io.FileUtils. Thanks to Pranet Verma.
772*0c4d7b72SSadaf Ebrahimio IO-580:  Update org.apache.commons.io.FilenameUtils.isExtension(String, String[]) to use var args.
773*0c4d7b72SSadaf Ebrahimio IO-701:  Make array declaration in ThresholdingOutputStream consistent with other array declarations in the library #77. Thanks to Raymond Tan.
774*0c4d7b72SSadaf Ebrahimio IO-607:  Update from Java 7 to Java 8. Thanks to Gary Gregory.
775*0c4d7b72SSadaf Ebrahimio IO-610:  Remove throws IOException in method isSymlink() #80. Thanks to Sebastian.
776*0c4d7b72SSadaf Ebrahimio IO-628:  Migration to JUnit Jupiter #97. Thanks to Allon Mureinik.
777*0c4d7b72SSadaf Ebrahimio IO-630:  Deprecate org.apache.commons.io.output.NullOutputStream.NullOutputStream() in favor of org.apache.commons.io.output.NullOutputStream.NULL_OUTPUT_STREAM. Thanks to Gary Gregory.
778*0c4d7b72SSadaf Ebrahimio IO-629:  FileUtils#forceDelete should use Files#delete rather than File#delete so exception messages includes reason for failure. Thanks to Ian Springer, Ian Springer, Gary Gregory.
779*0c4d7b72SSadaf Ebrahimio IO-634:  Make getCause synchronized and use a Deque instead of a Stack #64. Thanks to V�clav Haisman, Bruno P. Kinoshita, Gary Gregory.
780*0c4d7b72SSadaf Ebrahimio            Update tests from Apache Commons Lang 3.9 to 3.10. Thanks to Gary Gregory.
781*0c4d7b72SSadaf Ebrahimio            Update tests org.junit-pioneer:junit-pioneer 0.3.0 -> 0.6.0. Thanks to Gary Gregory.
782*0c4d7b72SSadaf Ebrahimio            Update tests org.junit.jupiter:junit-jupiter 5.5.2 -> 5.6.2. Thanks to Gary Gregory.
783*0c4d7b72SSadaf Ebrahimio            Update tests org.mockito:mockito-core 3.0.0 -> 3.3.3. Thanks to Gary Gregory.
784*0c4d7b72SSadaf Ebrahimio IO-666:  Normalize internal buffers to 8192 bytes. Thanks to Gary Gregory.
785*0c4d7b72SSadaf Ebrahimio IO-665:  Ensure that passing a null InputStream results in NPE with tests #112. Thanks to Otto Fowler, Gary Gregory.
786*0c4d7b72SSadaf Ebrahimio            commons.jacoco.version 0.8.4 -> 0.8.5. Thanks to Gary Gregory.
787*0c4d7b72SSadaf Ebrahimio            com.github.siom79.japicmp:japicmp-maven-plugin 0.14.1 -> 0.14.3. Thanks to Gary Gregory.
788*0c4d7b72SSadaf Ebrahimio IO-667:  Add functional interfaces IOFunction and IOSupplier #110. Thanks to Adam Retter, Gary Gregory.
789*0c4d7b72SSadaf Ebrahimio            Support sub sequences in CharSequenceReader #91. Thanks to Rob Spoor, Gary Gregory.
790*0c4d7b72SSadaf Ebrahimio            Remove deprecated sudo setting. #113. Thanks to dengliming.
791*0c4d7b72SSadaf Ebrahimi
792*0c4d7b72SSadaf EbrahimiCompatibility with 2.6:
793*0c4d7b72SSadaf EbrahimiBinary compatible: Yes.
794*0c4d7b72SSadaf EbrahimiSource compatible: Yes.
795*0c4d7b72SSadaf EbrahimiSemantic compatible: Yes.
796*0c4d7b72SSadaf Ebrahimi
797*0c4d7b72SSadaf EbrahimiCommons IO 2.7 requires Java 8.
798*0c4d7b72SSadaf EbrahimiCommons IO 2.6 requires Java 7.
799*0c4d7b72SSadaf EbrahimiCommons IO 2.5 requires Java 6.
800*0c4d7b72SSadaf EbrahimiCommons IO 2.4 requires Java 6.
801*0c4d7b72SSadaf EbrahimiCommons IO 2.3 requires Java 6.
802*0c4d7b72SSadaf EbrahimiCommons IO 2.2 requires Java 5.
803*0c4d7b72SSadaf EbrahimiCommons IO 1.4 requires Java 1.3.
804*0c4d7b72SSadaf Ebrahimi
805*0c4d7b72SSadaf EbrahimiHistorical list of changes: https://commons.apache.org/proper/commons-io/changes-report.html
806*0c4d7b72SSadaf Ebrahimi
807*0c4d7b72SSadaf EbrahimiFor complete information on Apache Commons IO, including instructions on how to submit bug reports,
808*0c4d7b72SSadaf Ebrahimipatches, or suggestions for improvement, see the Apache Commons IO website:
809*0c4d7b72SSadaf Ebrahimi
810*0c4d7b72SSadaf Ebrahimihttps://commons.apache.org/proper/commons-io/
811*0c4d7b72SSadaf Ebrahimi
812*0c4d7b72SSadaf EbrahimiDownload page: https://commons.apache.org/proper/commons-io/download_io.cgi
813*0c4d7b72SSadaf Ebrahimi
814*0c4d7b72SSadaf EbrahimiHave fun!
815*0c4d7b72SSadaf Ebrahimi-Apache Commons Team
816*0c4d7b72SSadaf Ebrahimi
817*0c4d7b72SSadaf Ebrahimi==============================================================================
818*0c4d7b72SSadaf Ebrahimi
819*0c4d7b72SSadaf EbrahimiApache Commons IO Version 2.6
820*0c4d7b72SSadaf Ebrahimi
821*0c4d7b72SSadaf EbrahimiINTRODUCTION:
822*0c4d7b72SSadaf Ebrahimi
823*0c4d7b72SSadaf EbrahimiApache Commons IO is a package of Java utility classes like java.io.
824*0c4d7b72SSadaf EbrahimiClasses in this package are considered to be so standard and of such high
825*0c4d7b72SSadaf Ebrahimireuse as to justify existence in java.io.
826*0c4d7b72SSadaf Ebrahimi
827*0c4d7b72SSadaf EbrahimiThe Apache Commons IO library contains utility classes, stream implementations,
828*0c4d7b72SSadaf Ebrahimifile filters, file comparators, endian transformation classes, and much more.
829*0c4d7b72SSadaf Ebrahimi
830*0c4d7b72SSadaf EbrahimiApache Commons IO 2.6 requires at least Java 7 to build and run.
831*0c4d7b72SSadaf Ebrahimi
832*0c4d7b72SSadaf Ebrahimi
833*0c4d7b72SSadaf EbrahimiDEPRECATIONS
834*0c4d7b72SSadaf Ebrahimi============
835*0c4d7b72SSadaf Ebrahimi
836*0c4d7b72SSadaf EbrahimiAll closeQuietly overloads in org.apache.commons.io.IOUtils have been
837*0c4d7b72SSadaf Ebrahimideprecated. Use the try-with-resources statement or handle suppressed
838*0c4d7b72SSadaf Ebrahimiexceptions manually.
839*0c4d7b72SSadaf Ebrahimi
840*0c4d7b72SSadaf EbrahimiThe class org.apache.commons.io.FileSystemUtils has been deprecated.
841*0c4d7b72SSadaf EbrahimiUse equivalent methods in java.nio.file.FileStore instead, e.g.
842*0c4d7b72SSadaf EbrahimiFiles.getFileStore(Paths.get("/home")).getUsableSpace() or iterate over
843*0c4d7b72SSadaf EbrahimiFileSystems.getDefault().getFileStores().
844*0c4d7b72SSadaf Ebrahimi
845*0c4d7b72SSadaf Ebrahimi
846*0c4d7b72SSadaf EbrahimiCOMPATIBILITY WITH JAVA 9
847*0c4d7b72SSadaf Ebrahimi==================
848*0c4d7b72SSadaf Ebrahimi
849*0c4d7b72SSadaf EbrahimiThe MANIFEST.MF now contains an additional entry:
850*0c4d7b72SSadaf Ebrahimi
851*0c4d7b72SSadaf Ebrahimi  Automatic-Module-Name: org.apache.commons.io
852*0c4d7b72SSadaf Ebrahimi
853*0c4d7b72SSadaf EbrahimiThis should make it possible to use Commons IO 2.6 as a module in the Java 9
854*0c4d7b72SSadaf Ebrahimimodule system. For more information see the corresponding issue:
855*0c4d7b72SSadaf Ebrahimi
856*0c4d7b72SSadaf Ebrahimi    https://issues.apache.org/jira/browse/IO-551
857*0c4d7b72SSadaf Ebrahimi
858*0c4d7b72SSadaf EbrahimiBuilding Commons IO 2.6 should work out of the box with the latest Java 9
859*0c4d7b72SSadaf Ebrahimirelease. Please report any Java 9 related issues at:
860*0c4d7b72SSadaf Ebrahimi
861*0c4d7b72SSadaf Ebrahimi    https://issues.apache.org/jira/browse/IO
862*0c4d7b72SSadaf Ebrahimi
863*0c4d7b72SSadaf Ebrahimi
864*0c4d7b72SSadaf EbrahimiNEW FEATURES
865*0c4d7b72SSadaf Ebrahimi============
866*0c4d7b72SSadaf Ebrahimi
867*0c4d7b72SSadaf Ebrahimio IO-551: Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility.
868*0c4d7b72SSadaf Ebrahimio IO-367: Add convenience methods for copyToDirectory. Thanks to James Sawle.
869*0c4d7b72SSadaf Ebrahimio IO-493: Add infinite circular input stream. Thanks to Piotr Turski.
870*0c4d7b72SSadaf Ebrahimio IO-507: Add a ByteOrderUtils class.
871*0c4d7b72SSadaf Ebrahimio IO-518: Add ObservableInputStream.
872*0c4d7b72SSadaf Ebrahimio IO-519: Add MessageDigestCalculatingInputStream.
873*0c4d7b72SSadaf Ebrahimio IO-513: Add convenience methods for reading class path resources.
874*0c4d7b72SSadaf Ebrahimi          Thanks to Behrang Saeedzadeh.
875*0c4d7b72SSadaf Ebrahimi
876*0c4d7b72SSadaf EbrahimiFIXED BUGS
877*0c4d7b72SSadaf Ebrahimi==========
878*0c4d7b72SSadaf Ebrahimi
879*0c4d7b72SSadaf Ebrahimio IO-546: ClosedOutputStream#flush should throw. Thanks to Tomas Celaya.
880*0c4d7b72SSadaf Ebrahimio IO-550: Documentation issue, fix 404 Javadoc issues in the description page.
881*0c4d7b72SSadaf Ebrahimi          Thanks to Jimi Adrian.
882*0c4d7b72SSadaf Ebrahimio IO-442: Javadoc contradictory for FileFilterUtils.ageFileFilter(cutoff) and
883*0c4d7b72SSadaf Ebrahimi          the filter it constructs: AgeFileFilter(cutoff).
884*0c4d7b72SSadaf Ebrahimi          Thanks to Simon Robinson.
885*0c4d7b72SSadaf Ebrahimio IO-534: FileUtilTestCase.testForceDeleteDir() should not delete testDirectory
886*0c4d7b72SSadaf Ebrahimi          parent.
887*0c4d7b72SSadaf Ebrahimio IO-528: Fix Tailer.run race condition runaway logging. Thanks to Dave Moten.
888*0c4d7b72SSadaf Ebrahimio IO-483: getPrefixLength return -1 if Unix file contains colon.
889*0c4d7b72SSadaf Ebrahimi          Thanks to Marko Vasic.
890*0c4d7b72SSadaf Ebrahimio IO-520: FileUtilsTestCase#testContentEqualsIgnoreEOL fails on Windows.
891*0c4d7b72SSadaf Ebrahimio IO-516: .gitattributes not correctly applied. Thanks to Jason Pyeron.
892*0c4d7b72SSadaf Ebrahimio IO-515: Allow Specifying Initial Buffer Size of DeferredFileOutputStream.
893*0c4d7b72SSadaf Ebrahimi          Thanks to Brett Lounsbury, Gary Gregory.
894*0c4d7b72SSadaf Ebrahimio IO-512: ThresholdingOutputStream.thresholdReached() results in
895*0c4d7b72SSadaf Ebrahimi          FileNotFoundException. Thanks to Ralf Hauser.
896*0c4d7b72SSadaf Ebrahimio IO-511: After a few unit tests, a few newly created directories not cleaned
897*0c4d7b72SSadaf Ebrahimi          completely. Thanks to Ahmet Celik.
898*0c4d7b72SSadaf Ebrahimio IO-502: Exceptions are suppressed incorrectly when copying files.
899*0c4d7b72SSadaf Ebrahimi          Thanks to Christian Schulte.
900*0c4d7b72SSadaf Ebrahimio IO-503: Update platform requirement to Java 7.
901*0c4d7b72SSadaf Ebrahimio IO-537: BOMInputStream shouldn't sort array of BOMs in-place.
902*0c4d7b72SSadaf Ebrahimi          Thanks to Borys Zibrov.
903*0c4d7b72SSadaf Ebrahimi
904*0c4d7b72SSadaf EbrahimiCHANGES
905*0c4d7b72SSadaf Ebrahimi=======
906*0c4d7b72SSadaf Ebrahimi
907*0c4d7b72SSadaf Ebrahimio IO-553: Make code style of hasBOM() consistent with getBOMCharsetName().
908*0c4d7b72SSadaf Ebrahimi          Thanks to Michael Ernst.
909*0c4d7b72SSadaf Ebrahimio IO-542: FileUtils#readFileToByteArray: optimize reading of files with known
910*0c4d7b72SSadaf Ebrahimi          size. Thanks to Ilmars Poikans.
911*0c4d7b72SSadaf Ebrahimio IO-547: Throw a IllegalArgumentException instead of NullPointerException in
912*0c4d7b72SSadaf Ebrahimi          FileSystemUtils.freeSpaceWindows(). Thanks to Nikhil Shinde,
913*0c4d7b72SSadaf Ebrahimi          Michael Ernst, Gary Greory.
914*0c4d7b72SSadaf Ebrahimio IO-506: Deprecate methods FileSystemUtils.freeSpaceKb().
915*0c4d7b72SSadaf Ebrahimi          Thanks to Christian Schulte.
916*0c4d7b72SSadaf Ebrahimio IO-505: Make LineIterator implement Closeable to support try-with-resources
917*0c4d7b72SSadaf Ebrahimi          statements. Thanks to Christian Schulte.
918*0c4d7b72SSadaf Ebrahimio IO-504: Deprecated of all IOUtils.closeQuietly() methods and use
919*0c4d7b72SSadaf Ebrahimi          try-with-resources internally. Thanks to Christian Schulte.
920*0c4d7b72SSadaf Ebrahimi
921*0c4d7b72SSadaf EbrahimiREMOVED
922*0c4d7b72SSadaf Ebrahimi=======
923*0c4d7b72SSadaf Ebrahimi
924*0c4d7b72SSadaf Ebrahimio IO-514: Remove org.apache.commons.io.Java7Support.
925*0c4d7b72SSadaf Ebrahimi
926*0c4d7b72SSadaf EbrahimiCOMPATIBILITY WITH OLDER VERSIONS
927*0c4d7b72SSadaf Ebrahimi=================================
928*0c4d7b72SSadaf Ebrahimi
929*0c4d7b72SSadaf EbrahimiCompatibility with 2.5:
930*0c4d7b72SSadaf EbrahimiBinary compatible: Yes.
931*0c4d7b72SSadaf EbrahimiSource compatible: Yes.
932*0c4d7b72SSadaf EbrahimiSemantic compatible: Yes.
933*0c4d7b72SSadaf Ebrahimi
934*0c4d7b72SSadaf EbrahimiCompatibility with 2.6 and 1.4:
935*0c4d7b72SSadaf EbrahimiBinary compatible: Yes.
936*0c4d7b72SSadaf EbrahimiSource compatible: No, see the rare case in
937*0c4d7b72SSadaf Ebrahimi  https://issues.apache.org/jira/browse/IO-318.
938*0c4d7b72SSadaf EbrahimiSemantic compatible: No, see the rare case in
939*0c4d7b72SSadaf Ebrahimi  https://issues.apache.org/jira/browse/IO-318.
940*0c4d7b72SSadaf Ebrahimi
941*0c4d7b72SSadaf EbrahimiCommons IO 2.6 requires Java 7 or later.
942*0c4d7b72SSadaf EbrahimiCommons IO 2.5 requires Java 6 or later.
943*0c4d7b72SSadaf EbrahimiCommons IO 2.4 requires Java 6 or later.
944*0c4d7b72SSadaf EbrahimiCommons IO 2.3 requires Java 6 or later.
945*0c4d7b72SSadaf EbrahimiCommons IO 2.2 requires Java 5 or later.
946*0c4d7b72SSadaf EbrahimiCommons IO 1.4 requires Java 1.3 or later.
947*0c4d7b72SSadaf Ebrahimi
948*0c4d7b72SSadaf Ebrahimi==============================================================================
949*0c4d7b72SSadaf Ebrahimi
950*0c4d7b72SSadaf EbrahimiApache Commons IO Version 2.5
951*0c4d7b72SSadaf Ebrahimi
952*0c4d7b72SSadaf EbrahimiNew features and bug fixes.
953*0c4d7b72SSadaf Ebrahimi
954*0c4d7b72SSadaf EbrahimiChanges in this version include:
955*0c4d7b72SSadaf Ebrahimi
956*0c4d7b72SSadaf EbrahimiNew features:
957*0c4d7b72SSadaf Ebrahimio IO-487:  Add ValidatingObjectInputStream for controlled deserialization
958*0c4d7b72SSadaf Ebrahimio IO-471:  Support for additional encodings in ReversedLinesFileReader Thanks to Leandro Reis.
959*0c4d7b72SSadaf Ebrahimio IO-425:  Setter method for threshold on ThresholdingOutputStream Thanks to Craig Swank.
960*0c4d7b72SSadaf Ebrahimio IO-406:  Introduce new class AppendableOutputStream Thanks to Niall Pemberton.
961*0c4d7b72SSadaf Ebrahimio IO-459:  Add WindowsLineEndingInputStream and UnixLineEndingInputStream. Thanks to Kristian Rosenvold.
962*0c4d7b72SSadaf Ebrahimio IO-457:  Add a BoundedReader, a wrapper that can be used to constrain access
963*0c4d7b72SSadaf Ebrahimi        to an underlying stream when used with mark/reset -
964*0c4d7b72SSadaf Ebrahimi        to avoid overflowing the mark limit of the underlying buffer. Thanks to Kristian Rosenvold.
965*0c4d7b72SSadaf Ebrahimio IO-426:  Add API IOUtils.closeQuietly(Closeable...)
966*0c4d7b72SSadaf Ebrahimio IO-410:  Readfully() That Returns A Byte Array Thanks to Beluga Behr.
967*0c4d7b72SSadaf Ebrahimio IO-395:  Overload IOUtils buffer methods to accept buffer size Thanks to Beluga Behr.
968*0c4d7b72SSadaf Ebrahimio IO-382:  Chunked IO for large arrays.
969*0c4d7b72SSadaf Ebrahimi         Added writeChunked(byte[], OutputStream) and writeChunked(char[] Writer)
970*0c4d7b72SSadaf Ebrahimi         Added ChunkedOutputStream, ChunkedWriter
971*0c4d7b72SSadaf Ebrahimio IO-233:  Add Methods for Buffering Streams/Writers To IOUtils
972*0c4d7b72SSadaf Ebrahimi         Added overloaded buffer() methods - see also IO-330
973*0c4d7b72SSadaf Ebrahimio IO-330:  IOUtils#toBufferedOutputStream/toBufferedWriter to conditionally wrap the output
974*0c4d7b72SSadaf Ebrahimi         Added overloaded buffer() methods - see also IO-233
975*0c4d7b72SSadaf Ebrahimio IO-381:  Add FileUtils.copyInputStreamToFile API with option to leave the source open.
976*0c4d7b72SSadaf Ebrahimi        See copyInputStreamToFile(final InputStream source, final File destination, boolean closeSource)
977*0c4d7b72SSadaf Ebrahimio IO-379:  CharSequenceInputStream - add tests for available()
978*0c4d7b72SSadaf Ebrahimi         Fix code so it really does reflect a minimum available.
979*0c4d7b72SSadaf Ebrahimio IO-346:  Add ByteArrayOutputStream.toInputStream()
980*0c4d7b72SSadaf Ebrahimio IO-341:  A constant for holding the BOM character (U+FEFF)
981*0c4d7b72SSadaf Ebrahimio IO-361:  Add API FileUtils.forceMkdirsParent().
982*0c4d7b72SSadaf Ebrahimio IO-360:  Add API Charsets.requiredCharsets().
983*0c4d7b72SSadaf Ebrahimio IO-359:  Add IOUtils.skip and skipFully(ReadableByteChannel, long). Thanks to yukoba.
984*0c4d7b72SSadaf Ebrahimio IO-358:  Add IOUtils.read and readFully(ReadableByteChannel, ByteBuffer buffer). Thanks to yukoba.
985*0c4d7b72SSadaf Ebrahimio IO-353:  Add API IOUtils.copy(InputStream, OutputStream, int) Thanks to ggregory.
986*0c4d7b72SSadaf Ebrahimio IO-349:  Add API with array offset and length argument to FileUtils.writeByteArrayToFile. Thanks to scop.
987*0c4d7b72SSadaf Ebrahimio IO-348:  Missing information in IllegalArgumentException thrown by org.apache.commons.io.FileUtils#validateListFilesParameters. Thanks to plcstpierre.
988*0c4d7b72SSadaf Ebrahimio IO-345:  Supply a hook method allowing Tailer actively determining stop condition. Thanks to mkresse.
989*0c4d7b72SSadaf Ebrahimio IO-437:  Make IOUtils.EOF public and reuse it in various classes.
990*0c4d7b72SSadaf Ebrahimi
991*0c4d7b72SSadaf EbrahimiFixed Bugs:
992*0c4d7b72SSadaf Ebrahimio IO-446:  adds an endOfFileReached method to the TailerListener Thanks to Jeffrey Barrus.
993*0c4d7b72SSadaf Ebrahimio IO-484:  FilenameUtils should handle embedded null bytes Thanks to Philippe Arteau.
994*0c4d7b72SSadaf Ebrahimio IO-481:  Changed/Corrected algorithm for waitFor
995*0c4d7b72SSadaf Ebrahimio IO-428:  BOMInputStream.skip returns wrong count if stream contains no BOM Thanks to Stefan Gmeiner.
996*0c4d7b72SSadaf Ebrahimio IO-488:  FileUtils.waitFor(...) swallows thread interrupted status Thanks to Bj�rn Buchner.
997*0c4d7b72SSadaf Ebrahimio IO-452:  Support for symlinks with missing target. Added support for JDK7 symlink features when present Thanks to David Standish.
998*0c4d7b72SSadaf Ebrahimio IO-453:  Regression in FileUtils.readFileToString from 2.0.1 Thanks to Steven Christou.
999*0c4d7b72SSadaf Ebrahimio IO-451:  ant test fails - resources missing from test classpath Thanks to David Standish.
1000*0c4d7b72SSadaf Ebrahimio IO-435:  Document that FileUtils.deleteDirectory, directoryContains and cleanDirectory
1001*0c4d7b72SSadaf Ebrahimi         may throw an IllegalArgumentException in case the passed directory does not
1002*0c4d7b72SSadaf Ebrahimi         exist or is not a directory. Thanks to Dominik Stadler.
1003*0c4d7b72SSadaf Ebrahimio IO-424:  Javadoc fixes, mostly to appease 1.8.0 Thanks to Ville Skytt�.
1004*0c4d7b72SSadaf Ebrahimio IO-389:  FileUtils.sizeOfDirectory can throw IllegalArgumentException Thanks to Austin Doupnik.
1005*0c4d7b72SSadaf Ebrahimio IO-390:  FileUtils.sizeOfDirectoryAsBigInteger can overflow.
1006*0c4d7b72SSadaf Ebrahimi         Ensure that recursive calls all use BigInteger
1007*0c4d7b72SSadaf Ebrahimio IO-385:  FileUtils.doCopyFile can potentially loop for ever
1008*0c4d7b72SSadaf Ebrahimi         Exit loop if no data to copy
1009*0c4d7b72SSadaf Ebrahimio IO-383:  FileUtils.doCopyFile caches the file size; needs to be documented
1010*0c4d7b72SSadaf Ebrahimi         Added Javadoc; show file lengths in exception message
1011*0c4d7b72SSadaf Ebrahimio IO-380:  FileUtils.copyInputStreamToFile should document it closes the input source Thanks to claudio_ch.
1012*0c4d7b72SSadaf Ebrahimio IO-279:  Tailer erroneously considers file as new.
1013*0c4d7b72SSadaf Ebrahimi        Fix to use file.lastModified() rather than System.currentTimeMillis()
1014*0c4d7b72SSadaf Ebrahimio IO-356:  CharSequenceInputStream#reset() behaves incorrectly in case when buffer size is not dividable by data size.
1015*0c4d7b72SSadaf Ebrahimi         Fix code so skip relates to the encoded bytes; reset now re-encodes the data up to the point of the mark
1016*0c4d7b72SSadaf Ebrahimio IO-368:  ClassLoaderObjectInputStream does not handle primitive typed members
1017*0c4d7b72SSadaf Ebrahimio IO-314:  Deprecate all methods that use the default encoding
1018*0c4d7b72SSadaf Ebrahimio IO-338:  When a file is rotated, finish reading previous file prior to starting new one
1019*0c4d7b72SSadaf Ebrahimio IO-354:  Commons IO Tailer does not respect UTF-8 Charset.
1020*0c4d7b72SSadaf Ebrahimio IO-323:  What should happen in FileUtils.sizeOf[Directory] when an overflow takes place?
1021*0c4d7b72SSadaf Ebrahimi        Added Javadoc.
1022*0c4d7b72SSadaf Ebrahimio IO-372:  FileUtils.moveDirectory can produce misleading error message on failure
1023*0c4d7b72SSadaf Ebrahimio IO-362:  IOUtils.contentEquals* methods returns false if input1 == input2, should return true. Thanks to mmadson, ggregory.
1024*0c4d7b72SSadaf Ebrahimio IO-357:  [Tailer] InterruptedException while the thread is sleeping is silently ignored Thanks to mortenh.
1025*0c4d7b72SSadaf Ebrahimio IO-352:  Spelling fixes. Thanks to scop.
1026*0c4d7b72SSadaf Ebrahimio IO-436:  Improper Javadoc comment for FilenameUtils.indexOfExtension. Thanks to christoph.schneegans.
1027*0c4d7b72SSadaf Ebrahimi
1028*0c4d7b72SSadaf EbrahimiChanges:
1029*0c4d7b72SSadaf Ebrahimio IO-433:  Converted all testcases to JUnit 4
1030*0c4d7b72SSadaf Ebrahimio IO-466:  Added testcase to show this was fixed with IO-423
1031*0c4d7b72SSadaf Ebrahimio IO-479:  Correct exception message in FileUtils.getFile(File, String...) Thanks to Zhouce Chen.
1032*0c4d7b72SSadaf Ebrahimio IO-465:  Update to JUnit 4.12 Thanks to based2.
1033*0c4d7b72SSadaf Ebrahimio IO-462:  IOExceptionWithCause no longer needed
1034*0c4d7b72SSadaf Ebrahimio IO-422:  Deprecate Charsets Charset constants in favor of Java 7's java.nio.charset.StandardCharsets
1035*0c4d7b72SSadaf Ebrahimio IO-239:  Convert IOCase to a Java 1.5+ Enumeration
1036*0c4d7b72SSadaf Ebrahimi         [N.B. this is binary compatible]
1037*0c4d7b72SSadaf Ebrahimio IO-328:  getPrefixLength returns null if filename has leading slashes
1038*0c4d7b72SSadaf Ebrahimi        Javadoc: add examples to show correct behavior; add unit tests
1039*0c4d7b72SSadaf Ebrahimio IO-299:  FileUtils.listFilesAndDirs includes original dir in results even when it doesn't match filter
1040*0c4d7b72SSadaf Ebrahimi        Javadoc: clarify that original dir is included in the results
1041*0c4d7b72SSadaf Ebrahimio IO-375:  FilenameUtils.splitOnTokens(String text) check for '**' could be simplified
1042*0c4d7b72SSadaf Ebrahimio IO-374:  WildcardFileFilter ctors should not use null to mean IOCase.SENSITIVE when delegating to other ctors
1043*0c4d7b72SSadaf Ebrahimi
1044*0c4d7b72SSadaf EbrahimiCompatibility with 2.4:
1045*0c4d7b72SSadaf EbrahimiBinary compatible: Yes.
1046*0c4d7b72SSadaf EbrahimiSource compatible: Yes.
1047*0c4d7b72SSadaf EbrahimiSemantic compatible: Yes.
1048*0c4d7b72SSadaf Ebrahimi
1049*0c4d7b72SSadaf EbrahimiCompatibility with 2.2 and 1.4:
1050*0c4d7b72SSadaf EbrahimiBinary compatible: Yes.
1051*0c4d7b72SSadaf EbrahimiSource compatible: No, see the rare case in https://issues.apache.org/jira/browse/IO-318.
1052*0c4d7b72SSadaf EbrahimiSemantic compatible: No, see the rare case in https://issues.apache.org/jira/browse/IO-318.
1053*0c4d7b72SSadaf Ebrahimi
1054*0c4d7b72SSadaf EbrahimiCommons IO 2.5 requires Java 6 or later.
1055*0c4d7b72SSadaf EbrahimiCommons IO 2.4 requires Java 6 or later.
1056*0c4d7b72SSadaf EbrahimiCommons IO 2.3 requires Java 6 or later.
1057*0c4d7b72SSadaf EbrahimiCommons IO 2.2 requires Java 5 or later.
1058*0c4d7b72SSadaf EbrahimiCommons IO 1.4 requires Java 1.3 or later.
1059*0c4d7b72SSadaf Ebrahimi
1060*0c4d7b72SSadaf Ebrahimi==============================================================================
1061*0c4d7b72SSadaf Ebrahimi
1062*0c4d7b72SSadaf EbrahimiApache Commons IO Version 2.4
1063*0c4d7b72SSadaf Ebrahimi
1064*0c4d7b72SSadaf EbrahimiChanges in this version include:
1065*0c4d7b72SSadaf Ebrahimi
1066*0c4d7b72SSadaf EbrahimiNew features:
1067*0c4d7b72SSadaf Ebrahimio IO-269:  Tailer locks file from deletion/rename on Windows. Thanks to
1068*0c4d7b72SSadaf Ebrahimisebb.
1069*0c4d7b72SSadaf Ebrahimio IO-333:  Export OSGi packages at version 1.x in addition to 2.x. Thanks
1070*0c4d7b72SSadaf Ebrahimito fmeschbe.
1071*0c4d7b72SSadaf Ebrahimio IO-320:  Add XmlStreamReader support for UTF-32. Thanks to ggregory.
1072*0c4d7b72SSadaf Ebrahimio IO-331:  BOMInputStream wrongly detects UTF-32LE_BOM files as
1073*0c4d7b72SSadaf EbrahimiUTF-16LE_BOM files in method getBOM(). Thanks to ggregory.
1074*0c4d7b72SSadaf Ebrahimio IO-327:  Add byteCountToDisplaySize(BigInteger). Thanks to ggregory.
1075*0c4d7b72SSadaf Ebrahimio IO-326:  Add new FileUtils.sizeOf[Directory] APIs to return BigInteger.
1076*0c4d7b72SSadaf EbrahimiThanks to ggregory.
1077*0c4d7b72SSadaf Ebrahimio IO-325:  Add IOUtils.toByteArray methods to work with URL and URI. Thanks
1078*0c4d7b72SSadaf Ebrahimito raviprak.
1079*0c4d7b72SSadaf Ebrahimio IO-324:  Add missing Charset sister APIs to method that take a String
1080*0c4d7b72SSadaf Ebrahimicharset name. Thanks to raviprak.
1081*0c4d7b72SSadaf Ebrahimi
1082*0c4d7b72SSadaf EbrahimiFixed Bugs:
1083*0c4d7b72SSadaf Ebrahimio IO-336:  Yottabyte (YB) incorrectly defined in FileUtils. Thanks to
1084*0c4d7b72SSadaf Ebrahimirleavelle.
1085*0c4d7b72SSadaf Ebrahimio IO-279:  Tailer erroneously considers file as new. Thanks to Sergio
1086*0c4d7b72SSadaf EbrahimiBossa, Chris Baron.
1087*0c4d7b72SSadaf Ebrahimio IO-335:  Tailer#readLines - incorrect CR handling.
1088*0c4d7b72SSadaf Ebrahimio IO-334:  FileUtils.toURLs throws NPE for null parameter; document the
1089*0c4d7b72SSadaf Ebrahimibehavior.
1090*0c4d7b72SSadaf Ebrahimio IO-332:  Improve tailer's reading performance. Thanks to liangly.
1091*0c4d7b72SSadaf Ebrahimio IO-279:  Improve Tailer performance with buffered reads (see IO-332).
1092*0c4d7b72SSadaf Ebrahimio IO-329:  FileUtils.writeLines uses unbuffered IO. Thanks to tivv.
1093*0c4d7b72SSadaf Ebrahimio IO-319:  FileUtils.sizeOfDirectory follows symbolic links. Thanks to
1094*0c4d7b72SSadaf Ebrahimiraviprak.
1095*0c4d7b72SSadaf Ebrahimi
1096*0c4d7b72SSadaf Ebrahimi
1097*0c4d7b72SSadaf EbrahimiCompatibility with 2.3:
1098*0c4d7b72SSadaf EbrahimiBinary compatible: Yes.
1099*0c4d7b72SSadaf EbrahimiSource compatible: Yes.
1100*0c4d7b72SSadaf EbrahimiSemantic compatible: Yes.
1101*0c4d7b72SSadaf Ebrahimi
1102*0c4d7b72SSadaf EbrahimiCompatibility with 2.2 and 1.4:
1103*0c4d7b72SSadaf EbrahimiBinary compatible: Yes.
1104*0c4d7b72SSadaf EbrahimiSource compatible: No, see the rare case in https://issues.apache.org/jira/browse/IO-318.
1105*0c4d7b72SSadaf EbrahimiSemantic compatible: No, see the rare case in https://issues.apache.org/jira/browse/IO-318.
1106*0c4d7b72SSadaf Ebrahimi
1107*0c4d7b72SSadaf EbrahimiCommons IO 2.4 requires Java 6 or later.
1108*0c4d7b72SSadaf EbrahimiCommons IO 2.3 requires Java 6 or later.
1109*0c4d7b72SSadaf EbrahimiCommons IO 2.2 requires Java 5 or later.
1110*0c4d7b72SSadaf EbrahimiCommons IO 1.4 requires Java 1.3 or later.
1111*0c4d7b72SSadaf Ebrahimi
1112*0c4d7b72SSadaf Ebrahimi==============================================================================
1113*0c4d7b72SSadaf Ebrahimi
1114*0c4d7b72SSadaf EbrahimiApache Commons IO Version 2.3
1115*0c4d7b72SSadaf Ebrahimi
1116*0c4d7b72SSadaf EbrahimiChanges in this version include:
1117*0c4d7b72SSadaf Ebrahimi
1118*0c4d7b72SSadaf EbrahimiNew features:
1119*0c4d7b72SSadaf Ebrahimio IO-322:  Add and use class Charsets. Thanks to ggregory.
1120*0c4d7b72SSadaf Ebrahimio IO-321:  ByteOrderMark UTF_32LE is incorrect. Thanks to ggregory.
1121*0c4d7b72SSadaf Ebrahimio IO-318:  Add Charset sister APIs to method that take a String charset name. Thanks to ggregory.
1122*0c4d7b72SSadaf Ebrahimi
1123*0c4d7b72SSadaf EbrahimiCompatibility with 2.2 and 1.4:
1124*0c4d7b72SSadaf EbrahimiBinary compatible: Yes.
1125*0c4d7b72SSadaf EbrahimiSource compatible: No, see the rare case in https://issues.apache.org/jira/browse/IO-318.
1126*0c4d7b72SSadaf EbrahimiSemantic compatible: No, see the rare case in https://issues.apache.org/jira/browse/IO-318.
1127*0c4d7b72SSadaf Ebrahimi
1128*0c4d7b72SSadaf EbrahimiCommons IO 2.3 requires Java 6 or later.
1129*0c4d7b72SSadaf EbrahimiCommons IO 2.2 requires Java 5 or later.
1130*0c4d7b72SSadaf EbrahimiCommons IO 1.4 requires Java 1.3 or later.
1131*0c4d7b72SSadaf Ebrahimi
1132*0c4d7b72SSadaf Ebrahimi==============================================================================
1133*0c4d7b72SSadaf Ebrahimi
1134*0c4d7b72SSadaf EbrahimiApache Commons IO Version 2.2
1135*0c4d7b72SSadaf Ebrahimi
1136*0c4d7b72SSadaf EbrahimiChanges in this version include:
1137*0c4d7b72SSadaf Ebrahimi
1138*0c4d7b72SSadaf EbrahimiNew features:
1139*0c4d7b72SSadaf Ebrahimio Add IOUtils.toBufferedReader(Reader)  Issue: IO-313. Thanks to ggregory.
1140*0c4d7b72SSadaf Ebrahimio Allow applications to provide buffer (or size) for copyLarge methods.  Issue: IO-308. Thanks to Manoj Mokashi.
1141*0c4d7b72SSadaf Ebrahimio New copyLarge() method in IOUtils that takes additional offset, length arguments  Issue: IO-305. Thanks to Manoj Mokashi.
1142*0c4d7b72SSadaf Ebrahimio Use terabyte (TB), petabyte (PB) and exabyte (EB) in FileUtils.byteCountToDisplaySize(long size)  Issue: IO-287. Thanks to Ron Kuris, Gary Gregory.
1143*0c4d7b72SSadaf Ebrahimio FileUtils.listFiles() doesn't return directories  Issue: IO-173. Thanks to Marcos Vin�cius da Silva.
1144*0c4d7b72SSadaf Ebrahimio CharSequenceInputStream to efficiently stream content of a CharSequence  Issue: IO-297. Thanks to Oleg Kalnichevski.
1145*0c4d7b72SSadaf Ebrahimio The second constructor of Tailer class does not pass 'delay' to the third one  Issue: IO-304. Thanks to liangly.
1146*0c4d7b72SSadaf Ebrahimio TeeOutputStream does not call branch.close() when main.close() throws an exception  Issue: IO-303. Thanks to fabian.barney.
1147*0c4d7b72SSadaf Ebrahimio ArrayIndexOutOfBoundsException in BOMInputStream when reading a file without BOM multiple times  Issue: IO-302. Thanks to jsteuerwald, detinho.
1148*0c4d7b72SSadaf Ebrahimio Add IOUtils.closeQuietly(Selector) necessary  Issue: IO-301. Thanks to kaykay.unique.
1149*0c4d7b72SSadaf Ebrahimio IOUtils.closeQuietly() should take a ServerSocket as a parameter  Issue: IO-292. Thanks to sebb.
1150*0c4d7b72SSadaf Ebrahimio Add read/readFully methods to IOUtils  Issue: IO-290. Thanks to sebb.
1151*0c4d7b72SSadaf Ebrahimio Supply a ReversedLinesFileReader  Issue: IO-288. Thanks to Georg Henzler.
1152*0c4d7b72SSadaf Ebrahimio Add new function FileUtils.directoryContains.  Issue: IO-291. Thanks to ggregory.
1153*0c4d7b72SSadaf Ebrahimio FileUtils.contentEquals and IOUtils.contentEquals - Add option to ignore "line endings"
1154*0c4d7b72SSadaf Ebrahimi        Added contentEqualsIgnoreEOL methods to both classes  Issue: IO-275. Thanks to CJ Aspromgos.
1155*0c4d7b72SSadaf Ebrahimi
1156*0c4d7b72SSadaf EbrahimiFixed Bugs:
1157*0c4d7b72SSadaf Ebrahimio IOUtils.read(InputStream/Reader) ignores the offset parameter  Issue: IO-311. Thanks to Robert Muir.
1158*0c4d7b72SSadaf Ebrahimio CharSequenceInputStream(CharSequence s, Charset charset, int bufferSize) ignores bufferSize  Issue: IO-312.
1159*0c4d7b72SSadaf Ebrahimio FileUtils.moveDirectoryToDirectory removes source directory if destination is a subdirectory  Issue: IO-300.
1160*0c4d7b72SSadaf Ebrahimio ReaderInputStream#read(byte[] b, int off, int len) should check for valid parameters  Issue: IO-307.
1161*0c4d7b72SSadaf Ebrahimio ReaderInputStream#read(byte[] b, int off, int len) should always return 0 for length == 0  Issue: IO-306.
1162*0c4d7b72SSadaf Ebrahimio "FileUtils#deleteDirectoryOnExit(File)" does not work  Issue: IO-276. Thanks to nkami.
1163*0c4d7b72SSadaf Ebrahimio BoundedInputStream.read() treats max differently from BoundedInputStream.read(byte[]...)  Issue: IO-273. Thanks to sebb.
1164*0c4d7b72SSadaf Ebrahimio Various methods of class 'org.apache.commons.io.FileUtils' incorrectly suppress 'java.io.IOException'  Issue: IO-298. Thanks to Christian Schulte.
1165*0c4d7b72SSadaf Ebrahimi
1166*0c4d7b72SSadaf EbrahimiChanges:
1167*0c4d7b72SSadaf Ebrahimio ReaderInputStream optimization: more efficient reading of small chunks of data  Issue: IO-296. Thanks to Oleg Kalnichevski.
1168*0c4d7b72SSadaf Ebrahimi
1169*0c4d7b72SSadaf Ebrahimi
1170*0c4d7b72SSadaf EbrahimiCompatibility with 2.1 and 1.4:
1171*0c4d7b72SSadaf EbrahimiBinary compatible: Yes
1172*0c4d7b72SSadaf EbrahimiSource compatible: Yes
1173*0c4d7b72SSadaf EbrahimiSemantic compatible: Yes. Check the bug fixes section for semantic bug fixes
1174*0c4d7b72SSadaf Ebrahimi
1175*0c4d7b72SSadaf EbrahimiCommons IO 2.2 requires a minimum of Java 5.
1176*0c4d7b72SSadaf EbrahimiCommons IO 1.4 requires a minimum of Java 1.3.
1177*0c4d7b72SSadaf Ebrahimi
1178*0c4d7b72SSadaf Ebrahimi==============================================================================
1179*0c4d7b72SSadaf Ebrahimi
1180*0c4d7b72SSadaf EbrahimiApache Commons IO Version 2.1
1181*0c4d7b72SSadaf Ebrahimi
1182*0c4d7b72SSadaf EbrahimiNew features:
1183*0c4d7b72SSadaf Ebrahimio Use standard Maven directory layout  Issue: IO-285. Thanks to ggregory.
1184*0c4d7b72SSadaf Ebrahimio Add IOUtils API toString for URL and URI to get contents  Issue: IO-284. Thanks to ggregory.
1185*0c4d7b72SSadaf Ebrahimio Add API FileUtils.copyFile(File input, OutputStream output)  Issue: IO-282. Thanks to ggregory.
1186*0c4d7b72SSadaf Ebrahimio FileAlterationObserver has no getter for FileFilter  Issue: IO-262.
1187*0c4d7b72SSadaf Ebrahimio Add FileUtils.getFile API with varargs parameter  Issue: IO-261.
1188*0c4d7b72SSadaf Ebrahimio Add new APPEND parameter for writing string into files  Issue: IO-182.
1189*0c4d7b72SSadaf Ebrahimio Add new read method "toByteArray" to handle InputStream with known size.  Issue: IO-251. Thanks to Marco Albini.
1190*0c4d7b72SSadaf Ebrahimi
1191*0c4d7b72SSadaf EbrahimiFixed Bugs:
1192*0c4d7b72SSadaf Ebrahimio Dubious use of mkdirs() return code  Issue: IO-280. Thanks to sebb.
1193*0c4d7b72SSadaf Ebrahimio ReaderInputStream enters infinite loop when it encounters an unmappable character  Issue: IO-277.
1194*0c4d7b72SSadaf Ebrahimio FileUtils.moveFile() Javadoc should specify FileExistsException thrown  Issue: IO-264.
1195*0c4d7b72SSadaf Ebrahimio ClassLoaderObjectInputStream does not handle Proxy classes  Issue: IO-260.
1196*0c4d7b72SSadaf Ebrahimio Tailer returning partial lines when reaching EOF before EOL  Issue: IO-274. Thanks to Frank Grimes.
1197*0c4d7b72SSadaf Ebrahimio FileUtils.copyFile() throws IOException when copying large files to a shared directory (on Windows)  Issue: IO-266. Thanks to Igor Smereka.
1198*0c4d7b72SSadaf Ebrahimio FileSystemUtils.freeSpaceKb throws exception for Windows volumes with no visible files.
1199*0c4d7b72SSadaf Ebrahimi        Improve coverage by also looking for hidden files.  Issue: IO-263. Thanks to Gil Adam.
1200*0c4d7b72SSadaf Ebrahimi
1201*0c4d7b72SSadaf EbrahimiChanges:
1202*0c4d7b72SSadaf Ebrahimio FileAlterationMonitor.stop(boolean allowIntervalToFinish)  Issue: IO-259.
1203*0c4d7b72SSadaf Ebrahimi
1204*0c4d7b72SSadaf Ebrahimi==============================================================================
1205*0c4d7b72SSadaf Ebrahimi
1206*0c4d7b72SSadaf EbrahimiApache Commons IO Package 2.0.1
1207*0c4d7b72SSadaf Ebrahimi
1208*0c4d7b72SSadaf EbrahimiCompatibility with 2.0 and 1.4
1209*0c4d7b72SSadaf Ebrahimi------------------------------
1210*0c4d7b72SSadaf EbrahimiBinary compatible - Yes
1211*0c4d7b72SSadaf Ebrahimi
1212*0c4d7b72SSadaf EbrahimiSource compatible - Yes
1213*0c4d7b72SSadaf Ebrahimi
1214*0c4d7b72SSadaf EbrahimiSemantic compatible - Yes
1215*0c4d7b72SSadaf Ebrahimi  Check the bug fixes section for semantic bug fixes
1216*0c4d7b72SSadaf Ebrahimi
1217*0c4d7b72SSadaf EbrahimiCommons IO 2.0.1 requires a minimum of Java 5
1218*0c4d7b72SSadaf Ebrahimi (Commons IO 1.4 had a minimum of Java 1.3)
1219*0c4d7b72SSadaf Ebrahimi
1220*0c4d7b72SSadaf EbrahimiEnhancements from 2.0
1221*0c4d7b72SSadaf Ebrahimi---------------------
1222*0c4d7b72SSadaf Ebrahimi
1223*0c4d7b72SSadaf Ebrahimi   * [IO-256] - Provide thread factory for FileAlternationMonitor
1224*0c4d7b72SSadaf Ebrahimi
1225*0c4d7b72SSadaf EbrahimiBug fixes from 2.0
1226*0c4d7b72SSadaf Ebrahimi------------------
1227*0c4d7b72SSadaf Ebrahimi
1228*0c4d7b72SSadaf Ebrahimi   * [IO-257] - BOMInputStream.read(byte[]) can return 0 which it should not
1229*0c4d7b72SSadaf Ebrahimi   * [IO-258] - XmlStreamReader consumes the stream during encoding detection
1230*0c4d7b72SSadaf Ebrahimi
1231*0c4d7b72SSadaf Ebrahimi==============================================================================
1232*0c4d7b72SSadaf Ebrahimi
1233*0c4d7b72SSadaf EbrahimiApache Commons IO Package 2.0
1234*0c4d7b72SSadaf Ebrahimi
1235*0c4d7b72SSadaf EbrahimiCompatibility with 1.4
1236*0c4d7b72SSadaf Ebrahimi----------------------
1237*0c4d7b72SSadaf EbrahimiBinary compatible - Yes
1238*0c4d7b72SSadaf Ebrahimi
1239*0c4d7b72SSadaf EbrahimiSource compatible - Yes
1240*0c4d7b72SSadaf Ebrahimi
1241*0c4d7b72SSadaf EbrahimiSemantic compatible - Yes
1242*0c4d7b72SSadaf Ebrahimi  Check the bug fixes section for semantic bug fixes
1243*0c4d7b72SSadaf Ebrahimi
1244*0c4d7b72SSadaf EbrahimiCommons IO 2.0 requires a minimum of Java 5
1245*0c4d7b72SSadaf Ebrahimi (Commons IO 1.4 had a minimum of Java 1.3)
1246*0c4d7b72SSadaf Ebrahimi
1247*0c4d7b72SSadaf EbrahimiDeprecations from 1.4
1248*0c4d7b72SSadaf Ebrahimi---------------------
1249*0c4d7b72SSadaf Ebrahimi
1250*0c4d7b72SSadaf Ebrahimi- IOUtils
1251*0c4d7b72SSadaf Ebrahimi  - write(StringBuffer, Writer) in favour of write(CharSequence, Writer)
1252*0c4d7b72SSadaf Ebrahimi  - write(StringBuffer, OutputStream)  in favour of write(CharSequence, OutputStream)
1253*0c4d7b72SSadaf Ebrahimi  - write(StringBuffer, OutputStream, String) in favour of write(CharSequence, OutputStream, String)
1254*0c4d7b72SSadaf Ebrahimi
1255*0c4d7b72SSadaf Ebrahimi- FileFilterUtils
1256*0c4d7b72SSadaf Ebrahimi  - andFileFilter(IOFileFilter, IOFileFilter) in favour of and(IOFileFilter...)
1257*0c4d7b72SSadaf Ebrahimi  - orFileFilter(IOFileFilter, IOFileFilter)  in favour of or(IOFileFilter...)
1258*0c4d7b72SSadaf Ebrahimi
1259*0c4d7b72SSadaf EbrahimiEnhancements from 1.4
1260*0c4d7b72SSadaf Ebrahimi---------------------
1261*0c4d7b72SSadaf Ebrahimi
1262*0c4d7b72SSadaf Ebrahimi  * [IO-140] Move minimum Java requirement from Java 1.3 to Java 5
1263*0c4d7b72SSadaf Ebrahimi             - use Generics
1264*0c4d7b72SSadaf Ebrahimi             - add new CharSequence write() flavour methods to IOUtils and FileUtils
1265*0c4d7b72SSadaf Ebrahimi             - replace StringBuffer with StringBuilder, where appropriate
1266*0c4d7b72SSadaf Ebrahimi             - add new Reader/Writer methods to ProxyReader and ProxyWriter
1267*0c4d7b72SSadaf Ebrahimi             - Annotate with @Override and @Deprecated
1268*0c4d7b72SSadaf Ebrahimi
1269*0c4d7b72SSadaf Ebrahimi  * [IO-178] New BOMInputStream and ByteOrderMark implementations - to detect and optionally exclude an initial Byte Order mark (BOM)
1270*0c4d7b72SSadaf Ebrahimi  * [IO-197] New BoundedInputStream (copied from Apache JackRabbit)
1271*0c4d7b72SSadaf Ebrahimi  * [IO-193] New Broken Input and Output streams
1272*0c4d7b72SSadaf Ebrahimi  * [IO-132] New File Listener/Monitor facility
1273*0c4d7b72SSadaf Ebrahimi  * [IO-158] New ReaderInputStream and WriterOutputStream implementations
1274*0c4d7b72SSadaf Ebrahimi  * [IO-139] New StringBuilder Writer implementation
1275*0c4d7b72SSadaf Ebrahimi  * [IO-192] New Tagged Input and Output streams
1276*0c4d7b72SSadaf Ebrahimi  * [IO-177] New Tailer class - simple implementation of the Unix "tail -f" functionality
1277*0c4d7b72SSadaf Ebrahimi  * [IO-162] New XML Stream Reader/Writer implementations (from ROME via plexus-utils)
1278*0c4d7b72SSadaf Ebrahimi
1279*0c4d7b72SSadaf Ebrahimi  * [IO-142] Comparators - add facility to sort file lists/arrays
1280*0c4d7b72SSadaf Ebrahimi  * [IO-186] Comparators - new Composite and Directory File Comparator implementations
1281*0c4d7b72SSadaf Ebrahimi  * [IO-176] DirectoryWalker - add filterDirectoryContents() callback method for filtering directory contents
1282*0c4d7b72SSadaf Ebrahimi  * [IO-210] FileFilter - new Magic Number FileFilter
1283*0c4d7b72SSadaf Ebrahimi  * [IO-221] FileFilterUtils - add methods for suffix and prefix filters which take an IOCase object
1284*0c4d7b72SSadaf Ebrahimi  * [IO-232] FileFilterUtils - add method for name filters which take an IOCase object
1285*0c4d7b72SSadaf Ebrahimi  * [IO-229] FileFilterUtils - add varargs and() and or() methods
1286*0c4d7b72SSadaf Ebrahimi  * [IO-198] FileFilterUtils - add ability to apply file filters to collections and arrays
1287*0c4d7b72SSadaf Ebrahimi  * [IO-156] FilenameUtils - add normalize() and normalizeNoEndSeparator() methods which allow the separator character to be specified
1288*0c4d7b72SSadaf Ebrahimi  * [IO-194] FileSystemUtils - add freeSpaceKb() method with no input arguments
1289*0c4d7b72SSadaf Ebrahimi  * [IO-185] FileSystemUtils - add freeSpaceKb() methods that take a timeout parameter - fixes freeSpaceWindows() blocks
1290*0c4d7b72SSadaf Ebrahimi  * [IO-155] FileUtils - use NIO to copy files
1291*0c4d7b72SSadaf Ebrahimi  * [IO-168] FileUtils - add new isSymlink() method
1292*0c4d7b72SSadaf Ebrahimi  * [IO-219] FileUtils - throw FileExistsException when moving a file or directory if the destination already exists
1293*0c4d7b72SSadaf Ebrahimi  * [IO-234] FileUtils - add Methods for retrieving System User/Temp directories/paths
1294*0c4d7b72SSadaf Ebrahimi  * [IO-208] FileUtils - add timeout (connection and read) support for copyURLToFile() method
1295*0c4d7b72SSadaf Ebrahimi  * [IO-238] FileUtils - add sizeOf(File) method
1296*0c4d7b72SSadaf Ebrahimi  * [IO-181] LineIterator now implements Iterable
1297*0c4d7b72SSadaf Ebrahimi  * [IO-224] IOUtils - add closeQuietly(Closeable) and closeQuietly(Socket) methods
1298*0c4d7b72SSadaf Ebrahimi  * [IO-203] IOUtils - add skipFully() method for InputStreams
1299*0c4d7b72SSadaf Ebrahimi  * [IO-137] IOUtils and ByteArrayOutputStream - add toBufferedInputStream() method to avoid unnecessary array allocation/copy
1300*0c4d7b72SSadaf Ebrahimi  * [IO-195] Proxy streams/Reader/Writer - provide exception handling methods
1301*0c4d7b72SSadaf Ebrahimi  * [IO-211] Proxy Input/Output streams - add pre/post processing support
1302*0c4d7b72SSadaf Ebrahimi  * [IO-242] Proxy Reader/Writer - add pre/post processing support
1303*0c4d7b72SSadaf Ebrahimi
1304*0c4d7b72SSadaf EbrahimiBug fixes from 1.4
1305*0c4d7b72SSadaf Ebrahimi------------------
1306*0c4d7b72SSadaf Ebrahimi  * [IO-214] ByteArrayOutputStream - fix inconsistent synchronization of fields
1307*0c4d7b72SSadaf Ebrahimi  * [IO-201] Counting Input/Output streams - fix inconsistent synchronization
1308*0c4d7b72SSadaf Ebrahimi  * [IO-159] FileCleaningTracker - fix remove() never returns null
1309*0c4d7b72SSadaf Ebrahimi  * [IO-220] FileCleaningTracker - fix Vector performs badly under load
1310*0c4d7b72SSadaf Ebrahimi  * [IO-167] FilenameUtils - fix case-insensitive string handling in FilenameUtils and FilesystemUtils
1311*0c4d7b72SSadaf Ebrahimi  * [IO-179] FilenameUtils - fix StringIndexOutOfBounds exception in getPathNoEndSeparator()
1312*0c4d7b72SSadaf Ebrahimi  * [IO-248] FilenameUtils - fix getFullPathNoEndSeparator() returns empty while path is a one level directory
1313*0c4d7b72SSadaf Ebrahimi  * [IO-246] FilenameUtils - fix wildcardMatch gives incorrect results
1314*0c4d7b72SSadaf Ebrahimi  * [IO-187] FileSystemUtils - fix freeSpaceKb() doesn't work with relative paths on Linux
1315*0c4d7b72SSadaf Ebrahimi  * [IO-160] FileSystemUtils - fix freeSpace() fails on solaris
1316*0c4d7b72SSadaf Ebrahimi  * [IO-209] FileSystemUtils - fix freeSpaceKb() fails to return correct size for a windows mount point
1317*0c4d7b72SSadaf Ebrahimi  * [IO-163] FileUtils - fix toURLs() using deprecated method of conversion to URL
1318*0c4d7b72SSadaf Ebrahimi  * [IO-168] FileUtils - fix Symbolic links followed when deleting directory
1319*0c4d7b72SSadaf Ebrahimi  * [IO-231] FileUtils - fix wrong exception message generated in isFileNewer() method
1320*0c4d7b72SSadaf Ebrahimi  * [IO-207] FileUtils - fix race condition in forceMkdir() method
1321*0c4d7b72SSadaf Ebrahimi  * [IO-217] FileUtils - fix copyDirectoryToDirectory() makes infinite loops
1322*0c4d7b72SSadaf Ebrahimi  * [IO-166] FileUtils - fix URL decoding in toFile(URL)
1323*0c4d7b72SSadaf Ebrahimi  * [IO-190] FileUtils - fix copyDirectory not preserving lastmodified date on subdirectories
1324*0c4d7b72SSadaf Ebrahimi  * [IO-240] FileFilterUtils - ensure cvsFilter and svnFilter are only created once.
1325*0c4d7b72SSadaf Ebrahimi  * [IO-175] IOUtils - fix copyFile() issues with very large files
1326*0c4d7b72SSadaf Ebrahimi  * [IO-191] Improvements from static analysis
1327*0c4d7b72SSadaf Ebrahimi  * [IO-216] LockableFileWriter - delete files quietly when an exception is thrown during initialization
1328*0c4d7b72SSadaf Ebrahimi  * [IO-243] SwappedDataInputStream - fix readBoolean is inverted
1329*0c4d7b72SSadaf Ebrahimi  * [IO-235] Tests - remove unused YellOnFlushAndCloseOutputStream from CopyUtilsTest
1330*0c4d7b72SSadaf Ebrahimi  * [IO-161] Tests - fix FileCleaningTrackerTestCase hanging
1331*0c4d7b72SSadaf Ebrahimi
1332*0c4d7b72SSadaf EbrahimiDocumentation changes from 1.4
1333*0c4d7b72SSadaf Ebrahimi------------------------------
1334*0c4d7b72SSadaf Ebrahimi  * [IO-183 FilenameUtils.getExtension() method documentation improvements
1335*0c4d7b72SSadaf Ebrahimi  * [IO-226 FileUtils.byteCountToDisplaySize() documentation corrections
1336*0c4d7b72SSadaf Ebrahimi  * [IO-205 FileUtils.forceMkdir() documentation improvements
1337*0c4d7b72SSadaf Ebrahimi  * [IO-215 FileUtils copy file/directory improve documentation regarding preserving the last modified date
1338*0c4d7b72SSadaf Ebrahimi  * [IO-189 HexDump.dump() method documentation improvements
1339*0c4d7b72SSadaf Ebrahimi  * [IO-171 IOCase document that it assumes there are only two OSes: Windows and Unix
1340*0c4d7b72SSadaf Ebrahimi  * [IO-223 IOUtils.copy() documentation corrections
1341*0c4d7b72SSadaf Ebrahimi  * [IO-247 IOUtils.closeQuietly() improve documentation with examples
1342*0c4d7b72SSadaf Ebrahimi  * [IO-202 NotFileFilter documentation corrections
1343*0c4d7b72SSadaf Ebrahimi  * [IO-206 ProxyInputStream - fix misleading parameter names
1344*0c4d7b72SSadaf Ebrahimi  * [IO-212 ProxyInputStream.skip() documentation corrections
1345*0c4d7b72SSadaf Ebrahimi
1346*0c4d7b72SSadaf Ebrahimi==============================================================================
1347*0c4d7b72SSadaf Ebrahimi
1348*0c4d7b72SSadaf EbrahimiApache Commons IO Version 1.4
1349*0c4d7b72SSadaf Ebrahimi
1350*0c4d7b72SSadaf EbrahimiCompatibility with 1.3.2
1351*0c4d7b72SSadaf Ebrahimi------------------------
1352*0c4d7b72SSadaf EbrahimiBinary compatible - Yes
1353*0c4d7b72SSadaf Ebrahimi
1354*0c4d7b72SSadaf EbrahimiSource compatible - Yes
1355*0c4d7b72SSadaf Ebrahimi
1356*0c4d7b72SSadaf EbrahimiSemantic compatible - Yes
1357*0c4d7b72SSadaf Ebrahimi  Check the bug fixes section for semantic bug fixes
1358*0c4d7b72SSadaf Ebrahimi
1359*0c4d7b72SSadaf EbrahimiCommons IO 1.4 introduces four new implementations which depend on Java 4 features
1360*0c4d7b72SSadaf Ebrahimi(CharSequenceReader, FileWriterWithEncoding, IOExceptionWithCause and RegexFileFilter).
1361*0c4d7b72SSadaf EbrahimiIt has been built with the JDK source and target options set to Java 1.3 and, except for
1362*0c4d7b72SSadaf Ebrahimithose implementations, can be used with Java 1.3 (see IO-127).
1363*0c4d7b72SSadaf Ebrahimi
1364*0c4d7b72SSadaf EbrahimiDeprecations from 1.3.2
1365*0c4d7b72SSadaf Ebrahimi-----------------------
1366*0c4d7b72SSadaf Ebrahimi- FileCleaner deprecated in favour of FileCleaningTracker [see IO-116]
1367*0c4d7b72SSadaf Ebrahimi
1368*0c4d7b72SSadaf EbrahimiBug fixes from 1.3.2
1369*0c4d7b72SSadaf Ebrahimi--------------------
1370*0c4d7b72SSadaf Ebrahimi- FileUtils
1371*0c4d7b72SSadaf Ebrahimi  - forceDelete of orphaned Softlinks does not work [IO-147]
1372*0c4d7b72SSadaf Ebrahimi  - Infinite loop on FileUtils.copyDirectory when the destination directory is within
1373*0c4d7b72SSadaf Ebrahimi    the source directory [IO-141]
1374*0c4d7b72SSadaf Ebrahimi  - Add a copyDirectory() method that makes use of FileFilter [IO-105]
1375*0c4d7b72SSadaf Ebrahimi  - Add moveDirectory() and moveFile() methods [IO-77]
1376*0c4d7b72SSadaf Ebrahimi
1377*0c4d7b72SSadaf Ebrahimi- HexDump
1378*0c4d7b72SSadaf Ebrahimi  - HexDump's use of static StringBuffers isn't thread-safe [IO-136]
1379*0c4d7b72SSadaf Ebrahimi
1380*0c4d7b72SSadaf EbrahimiEnhancements from 1.3.2
1381*0c4d7b72SSadaf Ebrahimi-----------------------
1382*0c4d7b72SSadaf Ebrahimi- FileUtils
1383*0c4d7b72SSadaf Ebrahimi  - Add a deleteQuietly method [IO-135]
1384*0c4d7b72SSadaf Ebrahimi
1385*0c4d7b72SSadaf Ebrahimi- FilenameUtils
1386*0c4d7b72SSadaf Ebrahimi  - Add file name extension separator constants[IO-149]
1387*0c4d7b72SSadaf Ebrahimi
1388*0c4d7b72SSadaf Ebrahimi- IOExceptionWithCause [IO-148]
1389*0c4d7b72SSadaf Ebrahimi  - Add a new IOException implementation with constructors which take a cause
1390*0c4d7b72SSadaf Ebrahimi
1391*0c4d7b72SSadaf Ebrahimi- TeeInputStream [IO-129]
1392*0c4d7b72SSadaf Ebrahimi  - Add new Tee input stream implementation
1393*0c4d7b72SSadaf Ebrahimi
1394*0c4d7b72SSadaf Ebrahimi- FileWriterWithEncoding [IO-153]
1395*0c4d7b72SSadaf Ebrahimi  - Add new File Writer implementation that accepts an encoding
1396*0c4d7b72SSadaf Ebrahimi
1397*0c4d7b72SSadaf Ebrahimi- CharSequenceReader [IO-138]
1398*0c4d7b72SSadaf Ebrahimi  - Add new Reader implementation that handles any CharSequence (String,
1399*0c4d7b72SSadaf Ebrahimi    StringBuffer, StringBuilder or CharBuffer)
1400*0c4d7b72SSadaf Ebrahimi
1401*0c4d7b72SSadaf Ebrahimi- ThresholdingOutputStream [IO-121]
1402*0c4d7b72SSadaf Ebrahimi  - Add a reset() method which sets the count of the bytes written back to zero.
1403*0c4d7b72SSadaf Ebrahimi
1404*0c4d7b72SSadaf Ebrahimi- DeferredFileOutputStream [IO-130]
1405*0c4d7b72SSadaf Ebrahimi  - Add support for temporary files
1406*0c4d7b72SSadaf Ebrahimi
1407*0c4d7b72SSadaf Ebrahimi- ByteArrayOutputStream
1408*0c4d7b72SSadaf Ebrahimi  - Add a new write(InputStream) method [IO-152]
1409*0c4d7b72SSadaf Ebrahimi
1410*0c4d7b72SSadaf Ebrahimi- New Closed Input/Output stream implementations [IO-122]
1411*0c4d7b72SSadaf Ebrahimi  - AutoCloseInputStream - automatically closes and discards the underlying input stream
1412*0c4d7b72SSadaf Ebrahimi  - ClosedInputStream - returns -1 for any read attempts
1413*0c4d7b72SSadaf Ebrahimi  - ClosedOutputStream - throws an IOException for any write attempts
1414*0c4d7b72SSadaf Ebrahimi  - CloseShieldInputStream - prevents the underlying input stream from being closed.
1415*0c4d7b72SSadaf Ebrahimi  - CloseShieldOutputStream - prevents the underlying output stream from being closed.
1416*0c4d7b72SSadaf Ebrahimi
1417*0c4d7b72SSadaf Ebrahimi- Add Singleton Constants to several stream classes [IO-143]
1418*0c4d7b72SSadaf Ebrahimi
1419*0c4d7b72SSadaf Ebrahimi- PrefixFileFilter [IO-126]
1420*0c4d7b72SSadaf Ebrahimi  - Add facility to specify case sensitivity on prefix matching
1421*0c4d7b72SSadaf Ebrahimi
1422*0c4d7b72SSadaf Ebrahimi- SuffixFileFilter [IO-126]
1423*0c4d7b72SSadaf Ebrahimi  - Add facility to specify case sensitivity on suffix matching
1424*0c4d7b72SSadaf Ebrahimi
1425*0c4d7b72SSadaf Ebrahimi- RegexFileFilter [IO-74]
1426*0c4d7b72SSadaf Ebrahimi  - Add new regular expression file filter implementation
1427*0c4d7b72SSadaf Ebrahimi
1428*0c4d7b72SSadaf Ebrahimi- Make IOFileFilter implementations Serializable [IO-131]
1429*0c4d7b72SSadaf Ebrahimi
1430*0c4d7b72SSadaf Ebrahimi- Improve IOFileFilter toString() methods [IO-120]
1431*0c4d7b72SSadaf Ebrahimi
1432*0c4d7b72SSadaf Ebrahimi- Make fields final so classes are immutable/threadsafe [IO-133]
1433*0c4d7b72SSadaf Ebrahimi  - changes to Age, Delegate, Name, Not, Prefix, Regex, Size, Suffix and Wildcard IOFileFilter
1434*0c4d7b72SSadaf Ebrahimi    implementations.
1435*0c4d7b72SSadaf Ebrahimi
1436*0c4d7b72SSadaf Ebrahimi- IOCase
1437*0c4d7b72SSadaf Ebrahimi  - Add a compare method to IOCase [IO-144]
1438*0c4d7b72SSadaf Ebrahimi
1439*0c4d7b72SSadaf Ebrahimi- Add a package of java.util.Comparator implementations for files [IO-145]
1440*0c4d7b72SSadaf Ebrahimi  - DefaultFileComparator - compare files using the default File.compareTo(File) method.
1441*0c4d7b72SSadaf Ebrahimi  - ExtensionFileComparator - compares files using file name extensions.
1442*0c4d7b72SSadaf Ebrahimi  - LastModifiedFileComparator - compares files using the last modified date/time.
1443*0c4d7b72SSadaf Ebrahimi  - NameFileComparator - compares files using file names.
1444*0c4d7b72SSadaf Ebrahimi  - PathFileComparator - compares files using file paths.
1445*0c4d7b72SSadaf Ebrahimi  - SizeFileComparator - compares files using file sizes.
1446*0c4d7b72SSadaf Ebrahimi
1447*0c4d7b72SSadaf Ebrahimi==============================================================================
1448*0c4d7b72SSadaf Ebrahimi
1449*0c4d7b72SSadaf EbrahimiApache Commons IO Version 1.3.2
1450*0c4d7b72SSadaf Ebrahimi
1451*0c4d7b72SSadaf EbrahimiCompatibility with 1.3.1
1452*0c4d7b72SSadaf Ebrahimi----------------------
1453*0c4d7b72SSadaf EbrahimiBinary compatible - Yes
1454*0c4d7b72SSadaf Ebrahimi
1455*0c4d7b72SSadaf EbrahimiSource compatible - Yes
1456*0c4d7b72SSadaf Ebrahimi
1457*0c4d7b72SSadaf EbrahimiSemantic compatible - Yes
1458*0c4d7b72SSadaf Ebrahimi
1459*0c4d7b72SSadaf EbrahimiCompatibility with 1.3
1460*0c4d7b72SSadaf Ebrahimi----------------------
1461*0c4d7b72SSadaf EbrahimiBinary compatible - No
1462*0c4d7b72SSadaf Ebrahimi  See [IO-113]
1463*0c4d7b72SSadaf Ebrahimi
1464*0c4d7b72SSadaf EbrahimiSource compatible - No
1465*0c4d7b72SSadaf Ebrahimi  See [IO-113]
1466*0c4d7b72SSadaf Ebrahimi
1467*0c4d7b72SSadaf EbrahimiSemantic compatible - Yes
1468*0c4d7b72SSadaf Ebrahimi
1469*0c4d7b72SSadaf EbrahimiEnhancements since 1.3.1
1470*0c4d7b72SSadaf Ebrahimi------------------------
1471*0c4d7b72SSadaf Ebrahimi
1472*0c4d7b72SSadaf Ebrahimi- Created the FileCleaningTracker, basically a non-static version of the
1473*0c4d7b72SSadaf Ebrahimi  FileCleaner, which can be controlled by the user. [IO-116]
1474*0c4d7b72SSadaf Ebrahimi- The FileCleaner is deprecated.
1475*0c4d7b72SSadaf Ebrahimi
1476*0c4d7b72SSadaf EbrahimiBug fixes from 1.3.1
1477*0c4d7b72SSadaf Ebrahimi--------------------
1478*0c4d7b72SSadaf Ebrahimi
1479*0c4d7b72SSadaf Ebrahimi- Some tests, which are implicitly assuming a Unix-like file system, are
1480*0c4d7b72SSadaf Ebrahimi  now skipped on Windows. [IO-115]
1481*0c4d7b72SSadaf Ebrahimi- EndianUtils
1482*0c4d7b72SSadaf Ebrahimi  - Both readSwappedUnsignedInteger(...) methods could return negative
1483*0c4d7b72SSadaf Ebrahimi    numbers due to int/long casting. [IO-117]
1484*0c4d7b72SSadaf Ebrahimi
1485*0c4d7b72SSadaf EbrahimiBug fixes from 1.3
1486*0c4d7b72SSadaf Ebrahimi------------------
1487*0c4d7b72SSadaf Ebrahimi
1488*0c4d7b72SSadaf Ebrahimi- FileUtils
1489*0c4d7b72SSadaf Ebrahimi  - NPE in openOutputStream(File) when file has no parent in path [IO-112]
1490*0c4d7b72SSadaf Ebrahimi  - readFileToString(File) is not static [IO-113]
1491*0c4d7b72SSadaf Ebrahimi
1492*0c4d7b72SSadaf Ebrahimi==============================================================================
1493*0c4d7b72SSadaf Ebrahimi
1494*0c4d7b72SSadaf EbrahimiApache Commons IO Version 1.3.1
1495*0c4d7b72SSadaf Ebrahimi
1496*0c4d7b72SSadaf EbrahimiCompatibility with 1.3
1497*0c4d7b72SSadaf Ebrahimi----------------------
1498*0c4d7b72SSadaf EbrahimiBinary compatible - No
1499*0c4d7b72SSadaf Ebrahimi  See [IO-113]
1500*0c4d7b72SSadaf Ebrahimi
1501*0c4d7b72SSadaf EbrahimiSource compatible - No
1502*0c4d7b72SSadaf Ebrahimi  See [IO-113]
1503*0c4d7b72SSadaf Ebrahimi
1504*0c4d7b72SSadaf EbrahimiSemantic compatible - Yes
1505*0c4d7b72SSadaf Ebrahimi
1506*0c4d7b72SSadaf EbrahimiBug fixes from 1.3
1507*0c4d7b72SSadaf Ebrahimi------------------
1508*0c4d7b72SSadaf Ebrahimi
1509*0c4d7b72SSadaf Ebrahimi- FileUtils
1510*0c4d7b72SSadaf Ebrahimi  - NPE in openOutputStream(File) when file has no parent in path [IO-112]
1511*0c4d7b72SSadaf Ebrahimi  - readFileToString(File) is not static [IO-113]
1512*0c4d7b72SSadaf Ebrahimi
1513*0c4d7b72SSadaf Ebrahimi==============================================================================
1514*0c4d7b72SSadaf Ebrahimi
1515*0c4d7b72SSadaf EbrahimiApache Commons IO Version 1.3
1516*0c4d7b72SSadaf Ebrahimi
1517*0c4d7b72SSadaf EbrahimiCompatibility with 1.2
1518*0c4d7b72SSadaf Ebrahimi----------------------
1519*0c4d7b72SSadaf EbrahimiBinary compatible - Yes
1520*0c4d7b72SSadaf Ebrahimi
1521*0c4d7b72SSadaf EbrahimiSource compatible - Yes
1522*0c4d7b72SSadaf Ebrahimi
1523*0c4d7b72SSadaf EbrahimiSemantic compatible - Yes
1524*0c4d7b72SSadaf Ebrahimi  Check the bug fixes section for semantic bug fixes
1525*0c4d7b72SSadaf Ebrahimi
1526*0c4d7b72SSadaf EbrahimiDeprecations from 1.2
1527*0c4d7b72SSadaf Ebrahimi---------------------
1528*0c4d7b72SSadaf Ebrahimi- WildcardFilter deprecated, replaced by WildcardFileFilter
1529*0c4d7b72SSadaf Ebrahimi  - old class only accepted files, thus had a confusing dual purpose
1530*0c4d7b72SSadaf Ebrahimi
1531*0c4d7b72SSadaf Ebrahimi- FileSystemUtils.freeSpace deprecated, replaced by freeSpaceKb
1532*0c4d7b72SSadaf Ebrahimi  - freeSpace returns a result that varies by operating system and
1533*0c4d7b72SSadaf Ebrahimi    thus isn't that useful
1534*0c4d7b72SSadaf Ebrahimi  - freeSpaceKb returns much better and more consistent results
1535*0c4d7b72SSadaf Ebrahimi  - freeSpaceKb existed in v1.2, so this is a gentle cutover
1536*0c4d7b72SSadaf Ebrahimi
1537*0c4d7b72SSadaf EbrahimiBug fixes from 1.2
1538*0c4d7b72SSadaf Ebrahimi------------------
1539*0c4d7b72SSadaf Ebrahimi- LineIterator now implements Iterator
1540*0c4d7b72SSadaf Ebrahimi  - It was always supposed to...
1541*0c4d7b72SSadaf Ebrahimi
1542*0c4d7b72SSadaf Ebrahimi- FileSystemUtils.freeSpace/freeSpaceKb [IO-83]
1543*0c4d7b72SSadaf Ebrahimi  - These should now work on AIX and HP-UX
1544*0c4d7b72SSadaf Ebrahimi
1545*0c4d7b72SSadaf Ebrahimi- FileSystemUtils.freeSpace/freeSpaceKb [IO-90]
1546*0c4d7b72SSadaf Ebrahimi  - Avoid infinite looping in Windows
1547*0c4d7b72SSadaf Ebrahimi  - Catch more errors with nice messages
1548*0c4d7b72SSadaf Ebrahimi
1549*0c4d7b72SSadaf Ebrahimi- FileSystemUtils.freeSpace [IO-91]
1550*0c4d7b72SSadaf Ebrahimi  - This is now documented not to work on SunOS 5
1551*0c4d7b72SSadaf Ebrahimi
1552*0c4d7b72SSadaf Ebrahimi- FileSystemUtils [IO-93]
1553*0c4d7b72SSadaf Ebrahimi  - Fixed resource leak leading to 'Too many open files' error
1554*0c4d7b72SSadaf Ebrahimi  - Previously did not destroy Process instances (as JDK Javadoc is so poor)
1555*0c4d7b72SSadaf Ebrahimi  - http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4801027
1556*0c4d7b72SSadaf Ebrahimi
1557*0c4d7b72SSadaf Ebrahimi- FileUtils.touch [IO-100]
1558*0c4d7b72SSadaf Ebrahimi  - The touch method previously gave no indication when the file could not
1559*0c4d7b72SSadaf Ebrahimi    be touched successfully (such as due to access restrictions) - it now
1560*0c4d7b72SSadaf Ebrahimi    throws an IOException if the last modified date cannot be changed
1561*0c4d7b72SSadaf Ebrahimi
1562*0c4d7b72SSadaf Ebrahimi- FileCleaner
1563*0c4d7b72SSadaf Ebrahimi  - This now handles the situation where an error occurs when deleting the file
1564*0c4d7b72SSadaf Ebrahimi
1565*0c4d7b72SSadaf Ebrahimi- IOUtils.copy [IO-84]
1566*0c4d7b72SSadaf Ebrahimi  - Copy methods could return inaccurate byte/char count for large streams
1567*0c4d7b72SSadaf Ebrahimi  - The copy(InputStream, OutputStream) method now returns -1 if the count is greater than an int
1568*0c4d7b72SSadaf Ebrahimi  - The copy(Reader, Writer) method now throws now returns -1 if the count is greater than an int
1569*0c4d7b72SSadaf Ebrahimi  - Added a new copyLarge(InputStream, OutputStream) method that returns a long
1570*0c4d7b72SSadaf Ebrahimi  - Added a new copyLarge(Reader, Writer) method that returns a long
1571*0c4d7b72SSadaf Ebrahimi
1572*0c4d7b72SSadaf Ebrahimi- CountingInputStream/CountingOutputStream [IO-84]
1573*0c4d7b72SSadaf Ebrahimi  - Methods were declared as int thus the count was inaccurate for large streams
1574*0c4d7b72SSadaf Ebrahimi  - new long based methods getByteCount()/resetByteCount() added
1575*0c4d7b72SSadaf Ebrahimi  - existing methods changed to throw an exception if the count is greater than an int
1576*0c4d7b72SSadaf Ebrahimi
1577*0c4d7b72SSadaf Ebrahimi- FileBasedTestCase
1578*0c4d7b72SSadaf Ebrahimi  - Fixed bug in compare content methods identified by GNU classpath
1579*0c4d7b72SSadaf Ebrahimi
1580*0c4d7b72SSadaf Ebrahimi- EndianUtils.writeSwappedLong(byte[], int) [IO-101]
1581*0c4d7b72SSadaf Ebrahimi  - An int overrun in the bit shifting when it should have been a long
1582*0c4d7b72SSadaf Ebrahimi
1583*0c4d7b72SSadaf Ebrahimi- EndianUtils.writeSwappedLong(InputStream) [IO-102]
1584*0c4d7b72SSadaf Ebrahimi  - The return of input.read(byte[]) was not being checked to ensure all 8 bytes were read
1585*0c4d7b72SSadaf Ebrahimi
1586*0c4d7b72SSadaf EbrahimiEnhancements from 1.2
1587*0c4d7b72SSadaf Ebrahimi---------------------
1588*0c4d7b72SSadaf Ebrahimi- DirectoryWalker [IO-86]
1589*0c4d7b72SSadaf Ebrahimi  - New class designed for subclassing to walk through a set of files.
1590*0c4d7b72SSadaf Ebrahimi    DirectoryWalker provides the walk of the directories, filtering of
1591*0c4d7b72SSadaf Ebrahimi    directories and files, and cancellation support. The subclass must provide
1592*0c4d7b72SSadaf Ebrahimi    the specific behavior, such as text searching or image processing.
1593*0c4d7b72SSadaf Ebrahimi
1594*0c4d7b72SSadaf Ebrahimi- IOCase
1595*0c4d7b72SSadaf Ebrahimi  - New class/enumeration for case-sensitivity control
1596*0c4d7b72SSadaf Ebrahimi
1597*0c4d7b72SSadaf Ebrahimi- FilenameUtils
1598*0c4d7b72SSadaf Ebrahimi  - New methods to handle case-sensitivity
1599*0c4d7b72SSadaf Ebrahimi  - wildcardMatch - new method that has IOCase as a parameter
1600*0c4d7b72SSadaf Ebrahimi  - equals - new method that has IOCase as a parameter
1601*0c4d7b72SSadaf Ebrahimi
1602*0c4d7b72SSadaf Ebrahimi- FileUtils [IO-108] - new default encoding methods for:
1603*0c4d7b72SSadaf Ebrahimi  - readFileToString(File)
1604*0c4d7b72SSadaf Ebrahimi  - readLines(File)
1605*0c4d7b72SSadaf Ebrahimi  - lineIterator(File)
1606*0c4d7b72SSadaf Ebrahimi  - writeStringToFile(File, String)
1607*0c4d7b72SSadaf Ebrahimi  - writeLines(File, Collection)
1608*0c4d7b72SSadaf Ebrahimi  - writeLines(File, Collection, String)
1609*0c4d7b72SSadaf Ebrahimi
1610*0c4d7b72SSadaf Ebrahimi- FileUtils.openOutputStream  [IO-107]
1611*0c4d7b72SSadaf Ebrahimi  - new method to open a FileOutputStream, creating parent directories if required
1612*0c4d7b72SSadaf Ebrahimi- FileUtils.touch
1613*0c4d7b72SSadaf Ebrahimi- FileUtils.copyURLToFile
1614*0c4d7b72SSadaf Ebrahimi- FileUtils.writeStringToFile
1615*0c4d7b72SSadaf Ebrahimi- FileUtils.writeByteArrayToFile
1616*0c4d7b72SSadaf Ebrahimi- FileUtils.writeLines
1617*0c4d7b72SSadaf Ebrahimi  - enhanced to create parent directories if required
1618*0c4d7b72SSadaf Ebrahimi- FileUtils.openInputStream  [IO-107]
1619*0c4d7b72SSadaf Ebrahimi  - new method to open a FileInputStream, providing better error messages than the JDK
1620*0c4d7b72SSadaf Ebrahimi
1621*0c4d7b72SSadaf Ebrahimi- FileUtils.isFileOlder
1622*0c4d7b72SSadaf Ebrahimi  - new methods to check if a file is older (i.e. isFileOlder()) - counterparts
1623*0c4d7b72SSadaf Ebrahimi    to the existing isFileNewer() methods.
1624*0c4d7b72SSadaf Ebrahimi
1625*0c4d7b72SSadaf Ebrahimi- FileUtils.checksum, FileUtils.checksumCRC32
1626*0c4d7b72SSadaf Ebrahimi  - new methods to create a checksum of a file
1627*0c4d7b72SSadaf Ebrahimi
1628*0c4d7b72SSadaf Ebrahimi- FileUtils.copyFileToDirectory  [IO-104]
1629*0c4d7b72SSadaf Ebrahimi  - new variant that optionally retains the file date
1630*0c4d7b72SSadaf Ebrahimi
1631*0c4d7b72SSadaf Ebrahimi- FileDeleteStrategy
1632*0c4d7b72SSadaf Ebrahimi- FileCleaner    [IO-56,IO-70]
1633*0c4d7b72SSadaf Ebrahimi  - FileDeleteStrategy is a strategy for handling file deletion
1634*0c4d7b72SSadaf Ebrahimi  - This can be used as a callback in FileCleaner
1635*0c4d7b72SSadaf Ebrahimi  - Together these allow FileCleaner to do a forceDelete to kill directories
1636*0c4d7b72SSadaf Ebrahimi
1637*0c4d7b72SSadaf Ebrahimi- FileCleaner.exitWhenFinished [IO-99]
1638*0c4d7b72SSadaf Ebrahimi  - A new method that allows the internal cleaner thread to be cleanly terminated
1639*0c4d7b72SSadaf Ebrahimi
1640*0c4d7b72SSadaf Ebrahimi- WildcardFileFilter
1641*0c4d7b72SSadaf Ebrahimi  - Replacement for WildcardFilter
1642*0c4d7b72SSadaf Ebrahimi  - Accepts both files and directories
1643*0c4d7b72SSadaf Ebrahimi  - Ability to control case-sensitivity
1644*0c4d7b72SSadaf Ebrahimi
1645*0c4d7b72SSadaf Ebrahimi- NameFileFilter
1646*0c4d7b72SSadaf Ebrahimi  - Ability to control case-sensitivity
1647*0c4d7b72SSadaf Ebrahimi
1648*0c4d7b72SSadaf Ebrahimi- FileFileFilter
1649*0c4d7b72SSadaf Ebrahimi  - New IOFileFilter implementation
1650*0c4d7b72SSadaf Ebrahimi  - Accepts files where File.isFile() is true
1651*0c4d7b72SSadaf Ebrahimi  - In other words it filters out directories
1652*0c4d7b72SSadaf Ebrahimi  - Singleton instance provided (FILE)
1653*0c4d7b72SSadaf Ebrahimi
1654*0c4d7b72SSadaf Ebrahimi- CanReadFileFilter
1655*0c4d7b72SSadaf Ebrahimi  - New IOFileFilter implementation
1656*0c4d7b72SSadaf Ebrahimi  - Accepts files where File.canRead() is true
1657*0c4d7b72SSadaf Ebrahimi  - Singleton instances provided (CAN_READ/CANNOT_READ/READ_ONLY)
1658*0c4d7b72SSadaf Ebrahimi
1659*0c4d7b72SSadaf Ebrahimi- CanWriteFileFilter
1660*0c4d7b72SSadaf Ebrahimi  - New IOFileFilter implementation
1661*0c4d7b72SSadaf Ebrahimi  - Accepts files where File.canWrite() is true
1662*0c4d7b72SSadaf Ebrahimi  - Singleton instances provided (CAN_WRITE/CANNOT_WRITE)
1663*0c4d7b72SSadaf Ebrahimi
1664*0c4d7b72SSadaf Ebrahimi- HiddenFileFilter
1665*0c4d7b72SSadaf Ebrahimi  - New IOFileFilter implementation
1666*0c4d7b72SSadaf Ebrahimi  - Accepts files where File.isHidden() is true
1667*0c4d7b72SSadaf Ebrahimi  - Singleton instances provided (HIDDEN/VISIBLE)
1668*0c4d7b72SSadaf Ebrahimi
1669*0c4d7b72SSadaf Ebrahimi- EmptyFileFilter
1670*0c4d7b72SSadaf Ebrahimi  - New IOFileFilter implementation
1671*0c4d7b72SSadaf Ebrahimi  - Accepts files or directories that are empty
1672*0c4d7b72SSadaf Ebrahimi  - Singleton instances provided (EMPTY/NOT_EMPTY)
1673*0c4d7b72SSadaf Ebrahimi
1674*0c4d7b72SSadaf Ebrahimi- TrueFileFilter/FalseFileFilter/DirectoryFileFilter
1675*0c4d7b72SSadaf Ebrahimi  - New singleton instance constants (TRUE/FALSE/DIRECTORY)
1676*0c4d7b72SSadaf Ebrahimi  - The new constants are more Java 5 friendly with regards to static imports
1677*0c4d7b72SSadaf Ebrahimi    (whereas if everything uses INSTANCE, then they just clash)
1678*0c4d7b72SSadaf Ebrahimi  - The old INSTANCE constants are still present and have not been deprecated
1679*0c4d7b72SSadaf Ebrahimi
1680*0c4d7b72SSadaf Ebrahimi- FileFilterUtils.sizeRangeFileFilter
1681*0c4d7b72SSadaf Ebrahimi  - new sizeRangeFileFilter(long minimumSize, long maximumSize) method which
1682*0c4d7b72SSadaf Ebrahimi    creates a filter that accepts files within the specified size range.
1683*0c4d7b72SSadaf Ebrahimi
1684*0c4d7b72SSadaf Ebrahimi- FileFilterUtils.makeDirectoryOnly/makeFileOnly
1685*0c4d7b72SSadaf Ebrahimi  - two new methods that decorate a file filter to make it apply to
1686*0c4d7b72SSadaf Ebrahimi    directories only or files only
1687*0c4d7b72SSadaf Ebrahimi
1688*0c4d7b72SSadaf Ebrahimi- NullWriter
1689*0c4d7b72SSadaf Ebrahimi  - New writer that acts as a sink for all data, as per /dev/null
1690*0c4d7b72SSadaf Ebrahimi
1691*0c4d7b72SSadaf Ebrahimi- NullInputStream
1692*0c4d7b72SSadaf Ebrahimi  - New input stream that emulates a stream of a specified size
1693*0c4d7b72SSadaf Ebrahimi
1694*0c4d7b72SSadaf Ebrahimi- NullReader
1695*0c4d7b72SSadaf Ebrahimi  - New reader that emulates a reader of a specified size
1696*0c4d7b72SSadaf Ebrahimi
1697*0c4d7b72SSadaf Ebrahimi- ByteArrayOutputStream  [IO-97]
1698*0c4d7b72SSadaf Ebrahimi  - Performance enhancements
1699*0c4d7b72SSadaf Ebrahimi
1700*0c4d7b72SSadaf Ebrahimi==============================================================================
1701*0c4d7b72SSadaf Ebrahimi
1702*0c4d7b72SSadaf EbrahimiApache Commons IO Version 1.2
1703*0c4d7b72SSadaf Ebrahimi
1704*0c4d7b72SSadaf EbrahimiCompatibility with 1.1
1705*0c4d7b72SSadaf Ebrahimi----------------------
1706*0c4d7b72SSadaf EbrahimiBinary compatible - Yes
1707*0c4d7b72SSadaf Ebrahimi
1708*0c4d7b72SSadaf EbrahimiSource compatible - Yes
1709*0c4d7b72SSadaf Ebrahimi
1710*0c4d7b72SSadaf EbrahimiSemantic compatible - Yes
1711*0c4d7b72SSadaf Ebrahimi
1712*0c4d7b72SSadaf EbrahimiDeprecations from 1.1
1713*0c4d7b72SSadaf Ebrahimi---------------------
1714*0c4d7b72SSadaf Ebrahimi
1715*0c4d7b72SSadaf EbrahimiBug fixes from 1.1
1716*0c4d7b72SSadaf Ebrahimi------------------
1717*0c4d7b72SSadaf Ebrahimi- FileSystemUtils.freeSpace(drive)
1718*0c4d7b72SSadaf Ebrahimi  Fix to allow Windows based command to function in French locale
1719*0c4d7b72SSadaf Ebrahimi
1720*0c4d7b72SSadaf Ebrahimi- FileUtils.read*
1721*0c4d7b72SSadaf Ebrahimi  Increase certainty that files are closed in case of error
1722*0c4d7b72SSadaf Ebrahimi
1723*0c4d7b72SSadaf Ebrahimi- LockableFileWriter
1724*0c4d7b72SSadaf Ebrahimi  Locking mechanism was broken and only provided limited protection [38942]
1725*0c4d7b72SSadaf Ebrahimi  File deletion and locking in case of constructor error was broken
1726*0c4d7b72SSadaf Ebrahimi
1727*0c4d7b72SSadaf EbrahimiEnhancements from 1.1
1728*0c4d7b72SSadaf Ebrahimi---------------------
1729*0c4d7b72SSadaf Ebrahimi- AgeFileFilter/SizeFileFilter
1730*0c4d7b72SSadaf Ebrahimi  New file filters that compares against the age and size of the file
1731*0c4d7b72SSadaf Ebrahimi
1732*0c4d7b72SSadaf Ebrahimi- FileSystemUtils.freeSpaceKb(drive)
1733*0c4d7b72SSadaf Ebrahimi  New method that unifies result to be in kilobytes [38574]
1734*0c4d7b72SSadaf Ebrahimi
1735*0c4d7b72SSadaf Ebrahimi- FileUtils.contentEquals(File,File)
1736*0c4d7b72SSadaf Ebrahimi  Performance improved by adding length and file location checking
1737*0c4d7b72SSadaf Ebrahimi
1738*0c4d7b72SSadaf Ebrahimi- FileUtils.iterateFiles
1739*0c4d7b72SSadaf Ebrahimi  Two new method to provide direct access to iterators over files
1740*0c4d7b72SSadaf Ebrahimi
1741*0c4d7b72SSadaf Ebrahimi- FileUtils.lineIterator
1742*0c4d7b72SSadaf Ebrahimi  IOUtils.lineIterator
1743*0c4d7b72SSadaf Ebrahimi  New methods to provide an iterator over the lines in a file [38083]
1744*0c4d7b72SSadaf Ebrahimi
1745*0c4d7b72SSadaf Ebrahimi- FileUtils.copyDirectoryToDirectory
1746*0c4d7b72SSadaf Ebrahimi  New method to copy a directory to within another directory [36315]
1747*0c4d7b72SSadaf Ebrahimi
1748*0c4d7b72SSadaf Ebrahimi==============================================================================
1749*0c4d7b72SSadaf Ebrahimi
1750*0c4d7b72SSadaf EbrahimiApache Commons IO Version 1.1
1751*0c4d7b72SSadaf Ebrahimi
1752*0c4d7b72SSadaf EbrahimiIncompatible changes from 1.0
1753*0c4d7b72SSadaf Ebrahimi-----------------------------
1754*0c4d7b72SSadaf EbrahimiBinary compatible - Yes
1755*0c4d7b72SSadaf Ebrahimi
1756*0c4d7b72SSadaf EbrahimiSource compatible - Yes
1757*0c4d7b72SSadaf Ebrahimi
1758*0c4d7b72SSadaf EbrahimiSemantic compatible - Yes, except:
1759*0c4d7b72SSadaf Ebrahimi- FileUtils.writeStringToFile()
1760*0c4d7b72SSadaf Ebrahimi    A null encoding previously used 'ISO-8859-1', now it uses the platform default
1761*0c4d7b72SSadaf Ebrahimi    Generally this will make no difference
1762*0c4d7b72SSadaf Ebrahimi
1763*0c4d7b72SSadaf Ebrahimi- LockableFileWriter
1764*0c4d7b72SSadaf Ebrahimi    Improved validation and now create directories if necessary
1765*0c4d7b72SSadaf Ebrahimi
1766*0c4d7b72SSadaf Ebrahimiplus these bug fixes may affect you semantically:
1767*0c4d7b72SSadaf Ebrahimi- FileUtils.touch()  (Bug fix 29821)
1768*0c4d7b72SSadaf Ebrahimi    Now creates the file if it did not previously exist
1769*0c4d7b72SSadaf Ebrahimi
1770*0c4d7b72SSadaf Ebrahimi- FileUtils.toFile(URL) (Bug fix 32575)
1771*0c4d7b72SSadaf Ebrahimi    Now handles escape syntax such as %20
1772*0c4d7b72SSadaf Ebrahimi
1773*0c4d7b72SSadaf Ebrahimi- FileUtils.sizeOfDirectory()  (Bug fix 36801)
1774*0c4d7b72SSadaf Ebrahimi    May now return a size of 0 if the directory is security restricted
1775*0c4d7b72SSadaf Ebrahimi
1776*0c4d7b72SSadaf EbrahimiDeprecations from 1.0
1777*0c4d7b72SSadaf Ebrahimi---------------------
1778*0c4d7b72SSadaf Ebrahimi- CopyUtils has been deprecated.
1779*0c4d7b72SSadaf Ebrahimi    Its methods have been moved to IOUtils.
1780*0c4d7b72SSadaf Ebrahimi    The new IOUtils methods handle nulls better, and have clearer names.
1781*0c4d7b72SSadaf Ebrahimi
1782*0c4d7b72SSadaf Ebrahimi- IOUtils.toByteArray(String) - Use {@link String#getBytes()}
1783*0c4d7b72SSadaf Ebrahimi- IOUtils.toString(byte[]) - Use {@link String#String(byte[])}
1784*0c4d7b72SSadaf Ebrahimi- IOUtils.toString(byte[],String) - Use {@link String#String(byte[],String)}
1785*0c4d7b72SSadaf Ebrahimi
1786*0c4d7b72SSadaf EbrahimiBug fixes from 1.0
1787*0c4d7b72SSadaf Ebrahimi------------------
1788*0c4d7b72SSadaf Ebrahimi- FileUtils - touch()  [29821]
1789*0c4d7b72SSadaf Ebrahimi    Now creates the file if it did not previously exist
1790*0c4d7b72SSadaf Ebrahimi
1791*0c4d7b72SSadaf Ebrahimi- FileUtils - toFile(URL)  [32575]
1792*0c4d7b72SSadaf Ebrahimi    Now handles escape syntax such as %20
1793*0c4d7b72SSadaf Ebrahimi
1794*0c4d7b72SSadaf Ebrahimi- FileFilterUtils - makeCVSAware(IOFileFilter)  [33023]
1795*0c4d7b72SSadaf Ebrahimi    Fixed bug that caused method to be completely broken
1796*0c4d7b72SSadaf Ebrahimi
1797*0c4d7b72SSadaf Ebrahimi- CountingInputStream  [33336]
1798*0c4d7b72SSadaf Ebrahimi    Fixed bug that caused the count to reduce by one at the end of the stream
1799*0c4d7b72SSadaf Ebrahimi
1800*0c4d7b72SSadaf Ebrahimi- CountingInputStream - skip(long)  [34311]
1801*0c4d7b72SSadaf Ebrahimi    Bytes from calls to this method were not previously counted
1802*0c4d7b72SSadaf Ebrahimi
1803*0c4d7b72SSadaf Ebrahimi- NullOutputStream  [33481]
1804*0c4d7b72SSadaf Ebrahimi    Remove unnecessary synchronization
1805*0c4d7b72SSadaf Ebrahimi
1806*0c4d7b72SSadaf Ebrahimi- AbstractFileFilter - accept(File, String)  [30992]
1807*0c4d7b72SSadaf Ebrahimi    Fixed broken implementation
1808*0c4d7b72SSadaf Ebrahimi
1809*0c4d7b72SSadaf Ebrahimi- FileUtils  [36801]
1810*0c4d7b72SSadaf Ebrahimi    Previously threw NPE when listing files in a security restricted directory
1811*0c4d7b72SSadaf Ebrahimi    Now throw IOException with a better message
1812*0c4d7b72SSadaf Ebrahimi
1813*0c4d7b72SSadaf Ebrahimi- FileUtils - writeStringToFile()
1814*0c4d7b72SSadaf Ebrahimi    Null encoding now correctly uses the platform default
1815*0c4d7b72SSadaf Ebrahimi
1816*0c4d7b72SSadaf EbrahimiEnhancements from 1.0
1817*0c4d7b72SSadaf Ebrahimi---------------------
1818*0c4d7b72SSadaf Ebrahimi- FilenameUtils - new class  [33303,29351]
1819*0c4d7b72SSadaf Ebrahimi    A static utility class for working with filenames
1820*0c4d7b72SSadaf Ebrahimi    Seeks to ease the pain of developing on Windows and deploying on Unix
1821*0c4d7b72SSadaf Ebrahimi
1822*0c4d7b72SSadaf Ebrahimi- FileSystemUtils - new class  [32982,36325]
1823*0c4d7b72SSadaf Ebrahimi    A static utility class for working with file systems
1824*0c4d7b72SSadaf Ebrahimi    Provides one method at present, to get the free space on the filing system
1825*0c4d7b72SSadaf Ebrahimi
1826*0c4d7b72SSadaf Ebrahimi- IOUtils - new public constants
1827*0c4d7b72SSadaf Ebrahimi    Constants for directory and line separators on Windows and Unix
1828*0c4d7b72SSadaf Ebrahimi
1829*0c4d7b72SSadaf Ebrahimi- IOUtils - toByteArray(Reader,encoding)
1830*0c4d7b72SSadaf Ebrahimi    Handles encodings when reading to a byte array
1831*0c4d7b72SSadaf Ebrahimi
1832*0c4d7b72SSadaf Ebrahimi- IOUtils - toCharArray(InputStream)  [28979]
1833*0c4d7b72SSadaf Ebrahimi          - toCharArray(InputStream,encoding)
1834*0c4d7b72SSadaf Ebrahimi          - toCharArray(Reader)
1835*0c4d7b72SSadaf Ebrahimi    Reads a stream/reader into a character array
1836*0c4d7b72SSadaf Ebrahimi
1837*0c4d7b72SSadaf Ebrahimi- IOUtils - readLines(InputStream)  [36214]
1838*0c4d7b72SSadaf Ebrahimi          - readLines(InputStream,encoding)
1839*0c4d7b72SSadaf Ebrahimi          - readLines(Reader)
1840*0c4d7b72SSadaf Ebrahimi    Reads a stream/reader line by line into a List of Strings
1841*0c4d7b72SSadaf Ebrahimi
1842*0c4d7b72SSadaf Ebrahimi- IOUtils - toInputStream(String)  [32958]
1843*0c4d7b72SSadaf Ebrahimi          - toInputStream(String,encoding)
1844*0c4d7b72SSadaf Ebrahimi    Creates an input stream that uses the string as a source of data
1845*0c4d7b72SSadaf Ebrahimi
1846*0c4d7b72SSadaf Ebrahimi- IOUtils - writeLines(Collection,lineEnding,OutputStream)  [36214]
1847*0c4d7b72SSadaf Ebrahimi          - writeLines(Collection,lineEnding,OutputStream,encoding)
1848*0c4d7b72SSadaf Ebrahimi          - writeLines(Collection,lineEnding,Writer)
1849*0c4d7b72SSadaf Ebrahimi    Writes a collection to a stream/writer line by line
1850*0c4d7b72SSadaf Ebrahimi
1851*0c4d7b72SSadaf Ebrahimi- IOUtils - write(...)
1852*0c4d7b72SSadaf Ebrahimi    Write data to a stream/writer (moved from CopyUtils with better null handling)
1853*0c4d7b72SSadaf Ebrahimi
1854*0c4d7b72SSadaf Ebrahimi- IOUtils - copy(...)
1855*0c4d7b72SSadaf Ebrahimi    Copy data between streams (moved from CopyUtils with better null handling)
1856*0c4d7b72SSadaf Ebrahimi
1857*0c4d7b72SSadaf Ebrahimi- IOUtils - contentEquals(Reader,Reader)
1858*0c4d7b72SSadaf Ebrahimi    Method to compare the contents of two readers
1859*0c4d7b72SSadaf Ebrahimi
1860*0c4d7b72SSadaf Ebrahimi- FileUtils - toFiles(URL[])
1861*0c4d7b72SSadaf Ebrahimi    Converts an array of URLs to an array of Files
1862*0c4d7b72SSadaf Ebrahimi
1863*0c4d7b72SSadaf Ebrahimi- FileUtils - copyDirectory()  [32944]
1864*0c4d7b72SSadaf Ebrahimi    New methods to copy a directory
1865*0c4d7b72SSadaf Ebrahimi
1866*0c4d7b72SSadaf Ebrahimi- FileUtils - readFileToByteArray(File)
1867*0c4d7b72SSadaf Ebrahimi    Reads an entire file into a byte array
1868*0c4d7b72SSadaf Ebrahimi
1869*0c4d7b72SSadaf Ebrahimi- FileUtils - writeByteArrayToFile(File,byte[])
1870*0c4d7b72SSadaf Ebrahimi    Writes a byte array to a file
1871*0c4d7b72SSadaf Ebrahimi
1872*0c4d7b72SSadaf Ebrahimi- FileUtils - readLines(File,encoding)  [36214]
1873*0c4d7b72SSadaf Ebrahimi    Reads a file line by line into a List of Strings
1874*0c4d7b72SSadaf Ebrahimi
1875*0c4d7b72SSadaf Ebrahimi- FileUtils - writeLines(File,encoding,List)
1876*0c4d7b72SSadaf Ebrahimi              writeLines(File,encoding,List,lineEnding)
1877*0c4d7b72SSadaf Ebrahimi    Writes a collection to a file line by line
1878*0c4d7b72SSadaf Ebrahimi
1879*0c4d7b72SSadaf Ebrahimi- FileUtils - EMPTY_FILE_ARRAY
1880*0c4d7b72SSadaf Ebrahimi    Constant for an empty array of File objects
1881*0c4d7b72SSadaf Ebrahimi
1882*0c4d7b72SSadaf Ebrahimi- ConditionalFileFilter - new interface  [30705]
1883*0c4d7b72SSadaf Ebrahimi    Defines the behavior of list based filters
1884*0c4d7b72SSadaf Ebrahimi
1885*0c4d7b72SSadaf Ebrahimi- AndFileFilter, OrFileFilter  [30705]
1886*0c4d7b72SSadaf Ebrahimi    Now support a list of filters to and/or
1887*0c4d7b72SSadaf Ebrahimi
1888*0c4d7b72SSadaf Ebrahimi- WildcardFilter  [31115]
1889*0c4d7b72SSadaf Ebrahimi    New filter that can match using wildcard file names
1890*0c4d7b72SSadaf Ebrahimi
1891*0c4d7b72SSadaf Ebrahimi- FileFilterUtils - makeSVNAware(IOFileFilter)
1892*0c4d7b72SSadaf Ebrahimi    New method, like makeCVSAware, that ignores Subversion source control directories
1893*0c4d7b72SSadaf Ebrahimi
1894*0c4d7b72SSadaf Ebrahimi- ClassLoaderObjectInputStream
1895*0c4d7b72SSadaf Ebrahimi    An ObjectInputStream that supports a ClassLoader
1896*0c4d7b72SSadaf Ebrahimi
1897*0c4d7b72SSadaf Ebrahimi- CountingInputStream,CountingOutputStream - resetCount()  [28976]
1898*0c4d7b72SSadaf Ebrahimi    Adds the ability to reset the count part way through reading/writing the stream
1899*0c4d7b72SSadaf Ebrahimi
1900*0c4d7b72SSadaf Ebrahimi- DeferredFileOutputStream - writeTo(OutputStream)  [34173]
1901*0c4d7b72SSadaf Ebrahimi    New method to allow current contents to be written to a stream
1902*0c4d7b72SSadaf Ebrahimi
1903*0c4d7b72SSadaf Ebrahimi- DeferredFileOutputStream  [34142]
1904*0c4d7b72SSadaf Ebrahimi    Performance optimizations avoiding double buffering
1905*0c4d7b72SSadaf Ebrahimi
1906*0c4d7b72SSadaf Ebrahimi- LockableFileWriter - encoding support [36825]
1907*0c4d7b72SSadaf Ebrahimi    Add support for character encodings to LockableFileWriter
1908*0c4d7b72SSadaf Ebrahimi    Improve the validation
1909*0c4d7b72SSadaf Ebrahimi    Create directories if necessary
1910*0c4d7b72SSadaf Ebrahimi
1911*0c4d7b72SSadaf Ebrahimi- IOUtils and EndianUtils are no longer final  [28978]
1912*0c4d7b72SSadaf Ebrahimi    Allows developers to have subclasses if desired
1913*0c4d7b72SSadaf Ebrahimi
1914*0c4d7b72SSadaf Ebrahimi==============================================================================
1915*0c4d7b72SSadaf EbrahimiFeedback
1916*0c4d7b72SSadaf Ebrahimi==============================================================================
1917*0c4d7b72SSadaf Ebrahimi
1918*0c4d7b72SSadaf EbrahimiOpen source works best when you give feedback:
1919*0c4d7b72SSadaf Ebrahimihttps://commons.apache.org/io/
1920*0c4d7b72SSadaf Ebrahimi
1921*0c4d7b72SSadaf EbrahimiPlease direct all bug reports to JIRA
1922*0c4d7b72SSadaf Ebrahimihttps://issues.apache.org/jira/browse/IO
1923*0c4d7b72SSadaf Ebrahimi
1924*0c4d7b72SSadaf EbrahimiOr subscribe to the commons-user mailing list (prefix emails by [io])
1925*0c4d7b72SSadaf Ebrahimihttps://commons.apache.org/mail-lists.html
1926*0c4d7b72SSadaf Ebrahimi
1927*0c4d7b72SSadaf EbrahimiThe Commons-IO Team
1928