1<?xml version="1.0"?> 2<!-- 3 Licensed to the Apache Software Foundation (ASF) under one or more 4 contributor license agreements. See the NOTICE file distributed with 5 this work for additional information regarding copyright ownership. 6 The ASF licenses this file to You under the Apache License, Version 2.0 7 (the "License"); you may not use this file except in compliance with 8 the License. You may obtain a copy of the License at 9 10 http://www.apache.org/licenses/LICENSE-2.0 11 12 Unless required by applicable law or agreed to in writing, software 13 distributed under the License is distributed on an "AS IS" BASIS, 14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 See the License for the specific language governing permissions and 16 limitations under the License. 17--> 18 19<!-- 20This file is used by the maven-changes-plugin to generate the release notes. 21Useful ways of finding items to add to this file are: 22 231. Add items when you fix a bug or add a feature (this makes the 24release process easy :-). 25 262. Do a Jira search for tickets closed since the previous release. 27 283. Use the report generated by the maven-changelog-plugin to see all 29CVS commits. Set the project.properties' maven.changelog.range 30property to the number of days since the last release. 31 32 33To generate the release notes from this file: 34 35mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn] 36 37then tweak the source formatting if necessary and regenerate, then commit 38 39The <action> type attribute can be add,update,fix,remove. 40--> 41 42<document> 43 <properties> 44 <title>Apache Commons IO Release Notes</title> 45 </properties> 46 47 <body> 48 <release version="2.12.0" date="2021-MM-DD" description="Java 8 required."> 49 <!-- FIX --> 50 <action issue="IO-697" dev="kinow" type="fix" due-to="otter606"> 51 IOUtils.toByteArray size validation does not match documentation. 52 </action> 53 <action dev="ggregory" type="fix" due-to="Gary Gregory"> 54 Fix Javadoc links to the JRE Javadoc 8. 55 </action> 56 <action issue="IO-744" dev="ggregory" type="fix" due-to="RBRi, Gary Gregory"> 57 FileWriterWithEncoding for an existing file no longer truncates the file. #251. 58 </action> 59 <action dev="ggregory" type="fix" due-to="Gary Gregory"> 60 A null Charset or Charset name in FileWriterWithEncoding constructors uses the default Charset. 61 </action> 62 <action dev="ggregory" type="fix" due-to="Davide Angelocola"> 63 Fix usage of assertNotNull #269. 64 </action> 65 <action issue="IO-727" dev="ggregory" type="fix" due-to="trungPa, Gary Gregory"> 66 FilenameUtils directoryContains() should handle files with the same prefix #217. 67 </action> 68 <action issue="IO-746" dev="ggregory" type="add" due-to="Davide Angelocola"> 69 Drop unnecessary casts and conversions #267. 70 </action> 71 <action issue="IO-748" dev="ggregory" type="fix" due-to="Dirk Heinrichs, Gary Gregory, Elango Ravi"> 72 FileUtils.moveToDirectory() exception documentation and exception message error. 73 </action> 74 <action dev="ggregory" type="fix" due-to="Gary Gregory"> 75 ThreadMonitor.sleep(Duration) ignores nanoseconds. 76 </action> 77 <action dev="ggregory" type="fix" due-to="Arturo Bernal"> 78 Fix Javadoc in ThreadMonitor#run() method. #273. 79 </action> 80 <action issue="IO-749" dev="ggregory" type="fix" due-to="haihuiyang, Gary Gregory"> 81 FileUtils.listFiles() does not list matching files if File parameter is a symbolic link. 82 </action> 83 <action dev="ggregory" type="fix" due-to="niranjanghule, Gary Gregory"> 84 Fix typo in Javadocs for FileUtils#convertFileCollectionToFileArray() #276. 85 </action> 86 <action dev="ggregory" type="fix" due-to="DaGeRe, Gary Gregory"> 87 Avoid Code Duplication: Reuse Sleep from ThreadMonitor #66. 88 </action> 89 <action issue="IO-750" dev="ggregory" type="fix" due-to="Sita Geßner, Sebastian Peters, Gary Gregory"> 90 FileUtils.iterateFiles also lists directories. 91 </action> 92 <action issue="IO-721" dev="ggregory" type="fix" due-to="Dirk Heinrichs, Gary Gregory"> 93 Wrong exception message in FileUtils.setLastModified(File, File). 94 </action> 95 <action issue="IO-717" dev="ggregory" type="fix" due-to="Marcono1234, Gary Gregory"> 96 Infinite loop in ReaderInputStream instead of throwing exception for CodingErrorAction.REPORT. 97 </action> 98 <action issue="IO-716" dev="ggregory" type="fix" due-to="Marcono1234, Gary Gregory"> 99 ReaderInputStream enter infinite loop for too small buffer sizes. 100 </action> 101 <action issue="IO-638" dev="ggregory" type="fix" due-to="Thayne McCombs, Gary Gregory"> 102 Infinite loop in CharSequenceInputStream.read for 4-byte characters with UTF-8 and 3-byte buffer. 103 </action> 104 <action issue="IO-638" dev="ggregory" type="fix" due-to="Gary Gregory"> 105 PathUtils.setReadOnly(Path, boolean, LinkOption...) should add READ_* file attributes when using POSIX. 106 </action> 107 <action issue="IO-638" dev="ggregory" type="fix" due-to="Gary Gregory"> 108 PathUtils.setReadOnly(Path, boolean, LinkOption...) readOnly argument is always assumed true on POSIX. 109 </action> 110 <action issue="IO-729" dev="ggregory" type="fix" due-to="Rob Spoor, Gary Gregory"> 111 Prevent IllegalArgumentExceptions in BrokenInputStream/Reader/OutputStream/Writer #278. 112 </action> 113 <action dev="ggregory" type="fix" due-to="Gary Gregory"> 114 FileUtils.copyURLToFile(URL, File, int, int) leaks its URLConnection. 115 Called by FileUtils.copyURLToFile(URL, File). 116 </action> 117 <action issue="IO-714" dev="ggregory" type="fix" due-to="kevinwang1975, Gary Gregory"> 118 Fixed ReaderInputStream not calling CharsetEncoder.flush issue #283. 119 </action> 120 <action dev="ggregory" type="fix" due-to="Arturo Bernal"> 121 Minor changes #287. 122 </action> 123 <action issue="IO-756" dev="ggregory" type="fix" due-to="wodencafe, Gary Gregory, Bruno P. Kinoshita"> 124 Update FileWriterWithEncoding to extend ProxyWriter #296. 125 </action> 126 <action dev="ggregory" type="fix" due-to="Gary Gregory"> 127 Initialize the message of an IOExceptionList to a default if null. 128 </action> 129 <action issue="IO-751" dev="ggregory" type="fix" due-to="Gary Gregory, Richard Cyganiak"> 130 When deleting symlinks, File/PathUtils.deleteDirectory() changes file permissions of the target. 131 </action> 132 <action dev="ggregory" type="fix" due-to="Gary Gregory"> 133 ReaderInputStream maps null Charset, Charset name, and CharsetEncoder to the platform default instead of throwing a NullPointerException. 134 </action> 135 <action dev="ggregory" type="fix" due-to="Gary Gregory"> 136 CharSequenceInputStream maps null Charset and Charset name to the platform default instead of throwing a NullPointerException. 137 </action> 138 <action dev="ggregory" type="fix" due-to="Gary Gregory"> 139 WriterOutputStream maps null Charset, Charset name, and CharsetEncoder name to the platform default instead of throwing a NullPointerException. 140 </action> 141 <action dev="ggregory" type="fix" due-to="Chad Wilson, Gary Gregory"> 142 FileUtils.copyURLToFile should create target parent directories and overwrite target file #319. 143 </action> 144 <action issue="IO-484" dev="ggregory" type="fix" due-to="Marcono1234, Gary Gregory"> 145 Fix incorrect FilenameUtils Javadoc for null bytes #310. 146 </action> 147 <action issue="IO-484" dev="ggregory" type="fix" due-to="Arturo Bernal"> 148 Change to uppercase variable constant. #323. 149 </action> 150 <action issue="IO-484" dev="ggregory" type="fix" due-to="David Huang, Gary Gregory"> 151 IOCase.isCaseSensitive(IOCase) result is backward #325. 152 </action> 153 <action issue="IO-758" dev="ggregory" type="fix" due-to="Marcono1234, Gary Gregory"> 154 Deprecate PathUtils.NOFOLLOW_LINK_OPTION_ARRAY in favor of noFollowLinkOptionArray(). 155 </action> 156 <action dev="ggregory" type="fix" due-to="Marcono1234, Gary Gregory"> 157 Improve ReaderInputStream documentation #291. 158 </action> 159 <action dev="ggregory" type="fix" due-to="richarda23"> 160 Fix misleading comments in FileFilterTest #334. 161 </action> 162 <action dev="ggregory" type="fix" due-to="Diego Marcilio"> 163 Add missing javadoc for exceptions thrown for invalid arguments #339. 164 </action> 165 <action dev="ggregory" type="fix" due-to="richarda23"> 166 FileFilterTest minor fixes #340. 167 </action> 168 <action issue="IO-764" dev="ggregory" type="fix" due-to="DaGeRe, Gary Gregory"> 169 IOUtils.write() throws OutOfMemoryError/NegativeArraySizeException while writing big strings #343. 170 </action> 171 <action issue="IO-768" dev="ggregory" type="fix" due-to="Marcono1234, Michael Osipov"> 172 Add reserved Windows file names CONIN$ and CONOUT$ to FileSystem #355. 173 </action> 174 <action issue="IO-773" dev="ggregory" type="fix" due-to="Dominik Reinarz, Gary Gregory"> 175 RegexFileFilter is no longer Serializable. 176 </action> 177 <action issue="IO-763" dev="ggregory" type="fix" due-to="Richard Adams, Gary Gregory"> 178 [Javadoc] FileFilterUtils doc does not match impl: missing some file filters. 179 </action> 180 <action issue="IO-762" dev="ggregory" type="fix" due-to="Leonidas Chiron, Gary Gregory"> 181 FileSystem.WINDOWS.isReservedFileName doesn't check for file extension. 182 </action> 183 <action issue="IO-772" dev="ggregory" type="fix" due-to="Dan Ziemba, Gary Gregory"> 184 Confusing Javadoc on IOUtils#resourceToURL() and other resource* methods. 185 </action> 186 <action issue="IO-443" dev="ggregory" type="fix" due-to="Dan Ziemba, Gary Gregory"> 187 FileUtils.copyFile methods throw an unnecessary "Failed to copy full contents from" exception. 188 </action> 189 <action issue="IO-564" dev="ggregory" type="fix" due-to="Hao Zhong, Bernd Eckenfels, Pascal Schumacher, Gary Gregory"> 190 Pick up Javadoc from super for override write() methods in AbstractByteArrayOutputStream and ByteArrayOutputStream. 191 </action> 192 <action dev="ggregory" type="fix" due-to="Marc Wrobel"> 193 Fix minor typos #367. 194 </action> 195 <action issue="IO-776" dev="kinow" type="fix" due-to="Chris Povirk"> 196 Fix parameters to requireNonNull call in DeferredOutputSteam #368. 197 </action> 198 <action dev="ggregory" type="fix" due-to="Gary Gregory"> 199 Fix PathUtils.copyFileToDirectory(URL,Path,CopyOption[]). 200 </action> 201 <action issue="IO-386" dev="ggregory" type="fix" due-to="Sebb, Bernd Eckenfels, zhipengxu, Gary Gregory"> 202 FileUtils.doCopyFile uses different methods to check the file sizes. 203 </action> 204 <action dev="ggregory" type="fix" due-to="Michael Ernst"> 205 Fix typos #375. 206 </action> 207 <action issue="IO-611" dev="ggregory" type="fix" due-to="Fedor Urvanov"> 208 FilenameUtils.normalize javadoc and tests #383. 209 </action> 210 <action issue="IO-611" dev="ggregory" type="fix" due-to="ArdenL-Liu, Bruno P. Kinoshita, Gary Gregory"> 211 Better docs in IOUtils and IOUtils.byteArray(int size) #374. 212 </action> 213 <action issue="IO-782" dev="ggregory" type="fix" due-to="Matteo Di Giovinazzo, Gary Gregory"> 214 SequenceReader should close readers when its close method is called #391. 215 </action> 216 <!-- ADD --> 217 <action type="add" dev="ggregory" due-to="Gary Gregory"> 218 Add GitHub coverage.yml. 219 </action> 220 <action issue="IO-726" dev="ggregory" type="fix" due-to="shollander, Gary Gregory"> 221 Add MemoryMappedFileInputStream #215. 222 </action> 223 <action dev="ggregory" type="add" due-to="Gary Gregory"> 224 Add BrokenReader.INSTANCE. 225 </action> 226 <action dev="ggregory" type="add" due-to="Gary Gregory"> 227 Add UncheckedBufferedReader. 228 </action> 229 <action dev="ggregory" type="add" due-to="Gary Gregory"> 230 Add UncheckedFilterReader. 231 </action> 232 <action dev="ggregory" type="add" due-to="Gary Gregory"> 233 Add UncheckedFilterWriter. 234 </action> 235 <action dev="ggregory" type="add" due-to="Gary Gregory"> 236 Add StringInputStream. 237 </action> 238 <action dev="ggregory" type="add" due-to="Gary Gregory"> 239 Add UncheckedFilterInputStream. 240 </action> 241 <action dev="ggregory" type="add" due-to="Gary Gregory"> 242 Add UncheckedFilterOutputStream. 243 </action> 244 <action dev="ggregory" type="add" due-to="Gary Gregory"> 245 Add BrokenInputStream.INSTANCE. 246 </action> 247 <action dev="ggregory" type="add" due-to="Gary Gregory"> 248 Add ClosedInputStream.INSTANCE and deprecate CLOSED_INPUT_STREAM. 249 </action> 250 <action dev="ggregory" type="add" due-to="Gary Gregory"> 251 Add ClosedReader.INSTANCE and deprecate CLOSED_READER. 252 </action> 253 <action dev="ggregory" type="add" due-to="Gary Gregory"> 254 Add BrokenWriter.INSTANCE. 255 </action> 256 <action dev="ggregory" type="add" due-to="Gary Gregory"> 257 Add ClosedOutputStream.INSTANCE and deprecate CLOSED_OUTPUT_STREAM. 258 </action> 259 <action dev="ggregory" type="add" due-to="Gary Gregory"> 260 Add ClosedWriter.INSTANCE and deprecate CLOSED_WRITER. 261 </action> 262 <action dev="ggregory" type="add" due-to="Gary Gregory"> 263 Add NullOutputStream.INSTANCE and deprecate NULL_OUTPUT_STREAM. 264 </action> 265 <action dev="ggregory" type="add" due-to="Gary Gregory"> 266 Add NullPrintStream.INSTANCE and deprecate NULL_PRINT_STREAM. 267 </action> 268 <action dev="ggregory" type="add" due-to="Gary Gregory"> 269 Add NullWriter.INSTANCE and deprecate NULL_WRITER. 270 </action> 271 <action dev="ggregory" type="add" due-to="Gary Gregory"> 272 Add NullInputStream.INSTANCE. 273 </action> 274 <action dev="ggregory" type="add" due-to="Gary Gregory"> 275 Add NullReader.INSTANCE. 276 </action> 277 <action dev="ggregory" type="add" due-to="Gary Gregory"> 278 Add PathUtils.readString(Path, Charset). 279 </action> 280 <action dev="ggregory" type="add" due-to="Gary Gregory"> 281 Add FileUtils.newOutputStream(File, boolean). 282 </action> 283 <action dev="ggregory" type="add" due-to="Gary Gregory"> 284 Add PathUtils.newOutputStream(Path, boolean). 285 </action> 286 <action dev="ggregory" type="add" due-to="Gary Gregory"> 287 Add UncheckedAppendable. 288 </action> 289 <action dev="ggregory" type="add" due-to="Gary Gregory"> 290 Add and reuse UncheckedIOExceptions. 291 </action> 292 <action dev="ggregory" type="add" due-to="Gary Gregory"> 293 Add PathUtils.getTempDirectory(). 294 </action> 295 <action dev="ggregory" type="add" due-to="Gary Gregory"> 296 Add FileSystem.getNameSeparator(). 297 </action> 298 <action dev="ggregory" type="add" due-to="Gary Gregory"> 299 Add FileSystem.normalizeSeparators(). 300 </action> 301 <action dev="ggregory" type="add" due-to="Gary Gregory"> 302 Add PathUtils.isNewer(Path, FileTime, LinkOption...). 303 </action> 304 <action dev="ggregory" type="add" due-to="Gary Gregory"> 305 Add PathUtils.isNewer(Path, Instant, LinkOption...). 306 </action> 307 <action dev="ggregory" type="add" due-to="Gary Gregory"> 308 Add AgeFileFilter.AgeFileFilter(Instant). 309 Add AgeFileFilter.AgeFileFilter(Instant, boolean). 310 </action> 311 <action dev="ggregory" type="add" due-to="Gary Gregory"> 312 Add FileUtils.lastModifiedFileTime(File). 313 </action> 314 <action dev="ggregory" type="add" due-to="Gary Gregory"> 315 Add FileTimes. 316 </action> 317 <action dev="ggregory" type="add" due-to="Gary Gregory"> 318 Add PathUtils.waitFor(Path, Duration, LinkOption...). 319 </action> 320 <action dev="ggregory" type="add" due-to="Gary Gregory"> 321 Add org.apache.commons.io.input.Tailer.getDelayDuration(). 322 </action> 323 <action dev="ggregory" type="add" due-to="Gary Gregory"> 324 Add FileUtils.current(). 325 </action> 326 <action dev="ggregory" type="add" due-to="Gary Gregory"> 327 Add and use PathUtils.setLastModifiedTime(Path) for more precision. 328 Add and use PathUtils.setLastModifiedTime(Path, Path) for more precision. 329 </action> 330 <action dev="ggregory" type="add" due-to="Gary Gregory"> 331 Add and use PathUtils.isNewer(Path, ChronoZonedDateTime, LinkOption...) for more precision. 332 Add and use PathUtils.isNewer(Path, Path) for more precision. 333 Add and use FileUtils.isNewer(File, FileTime) for more precision. 334 </action> 335 <action dev="ggregory" type="add" due-to="Gary Gregory"> 336 Add and use PathUtils.isOlder(Path, FileTime, LinkOption...). 337 Add and use PathUtils.isOlder(Path, Instant, LinkOption...). 338 Add and use PathUtils.isOlder(Path, long, LinkOption...). 339 Add and use PathUtils.isOlder(Path, Path). 340 </action> 341 <action dev="ggregory" type="add" due-to="Gary Gregory"> 342 Add and use PathUtils.sizeOf(Path). 343 Add and use PathUtils.sizeOfAsBigInteger(Path). 344 Add and use PathUtils.sizeOfDirectory(Path). 345 Add and use PathUtils.sizeOfDirectoryAsBigInteger(Path). 346 </action> 347 <action dev="ggregory" type="add" due-to="Gary Gregory"> 348 Add and use IOCase.value(IOCase, IOCase). 349 </action> 350 <action dev="jonfreedman" type="add" due-to="Jon Freedman, Gary Gregory"> 351 Add Tailer.Tailable interface to allow tailing of remote files for example using jCIFS. 352 </action> 353 <action dev="ggregory" type="add" due-to="Gary Gregory"> 354 Add and use RandomAccessFileMode. 355 </action> 356 <action dev="ggregory" type="add" due-to="Gary Gregory"> 357 Add PathUtils.writeString(Path, CharSequence, Charset, OpenOption...). 358 </action> 359 <action dev="ggregory" type="add" due-to="Gary Gregory"> 360 Add PathUtiFiles.getFileAttributeView() shorthands: 361 - PathUtils.getAclFileAttributeView(Path, LinkOption...) 362 - PathUtils.getDosFileAttributeView(Path, LinkOption...) 363 - PathUtils.getPosixFileAttributeView(Path, LinkOption...) 364 </action> 365 <action issue="IO-747" dev="mgrigorov" type="add"> 366 Make commons-io a JPMS module by adding module-info.class. 367 </action> 368 <action issue="IO-753" dev="ggregory" type="add" due-to="SebastianDietrich, Gary Gregory"> 369 Add IOUtils method to copy output stream to input stream #281. 370 </action> 371 <action dev="ggregory" type="add" due-to="Gary Gregory"> 372 Add PathUtils.isPosix(Path, LinkOption...). #290 373 </action> 374 <action dev="ggregory" type="add" due-to="Gary Gregory"> 375 Add PathUtils.readAttributes(Path, Class, LinkOption...). #290 376 </action> 377 <action dev="ggregory" type="add" due-to="Gary Gregory"> 378 Add IOExceptionList.checkEmpty(List, Object). 379 </action> 380 <action dev="ggregory" type="add" due-to="Gary Gregory"> 381 Add IOBiConsumer, IOTriConsumer, IOComparator, IOUnaryOperator, IOBinaryOperator. 382 </action> 383 <action dev="ggregory" type="add" due-to="Gary Gregory"> 384 Add and reuse IOConsumer forAll(*), forEach(*), and forEachIndexed(*). 385 </action> 386 <action dev="ggregory" type="add" due-to="Gary Gregory"> 387 Add CharsetEncoders. 388 </action> 389 <action dev="ggregory" type="add" due-to="Gary Gregory"> 390 Add CharsetDecoders. 391 </action> 392 <action dev="ggregory" type="add" due-to="Gary Gregory"> 393 Add PathUtils.createParentDirectories(Path, LinkOption, FileAttribute...). 394 </action> 395 <action dev="ggregory" type="add" due-to="Gary Gregory"> 396 Update FileEntry to use FileTime instead of long for file time stamps. 397 </action> 398 <action issue="IO-680" dev="ggregory" type="add" due-to="XenoAmess, sebbASF, Gary Gregory"> 399 Add more tests for IOUtils.contentEqualsIgnoreEOL #137. 400 </action> 401 <action dev="ggregory" type="add" due-to="Gary Gregory"> 402 Reduce boilerplate through new UncheckedIO class and friends in org.apache.commons.io.function. 403 </action> 404 <action dev="ggregory" type="add" due-to="Gary Gregory"> 405 Add PathUtils.touch(Path). 406 </action> 407 <action dev="ggregory" type="add" due-to="Gary Gregory"> 408 Add FileSystem.getIllegalFileNameCodePoints(). 409 </action> 410 <action dev="ggregory" type="add" due-to="Isira Seneviratne, Gary Gregory"> 411 Add FileUtils.isFileNewer(File, ChronoLocalDate, OffsetTime). 412 Add FileUtils.isFileNewer(File, OffsetDateTime). 413 Add FileUtils.isFileOlder(File, ChronoLocalDate, OffsetTime). 414 Add FileUtils.isFileOlder(File, OffsetDateTime). 415 </action> 416 <action dev="ggregory" type="add" due-to="Gary Gregory"> 417 Add IOBiConsumer.noop(). 418 </action> 419 <action dev="ggregory" type="add" due-to="Gary Gregory"> 420 Add IOUtils.closeQuietly(Iterable<Closeable>). 421 Add IOUtils.closeQuietly(Stream<Closeable>). 422 </action> 423 <action dev="ggregory" type="add" due-to="Gary Gregory"> 424 Add Charsets.toCharset(Charset, Charset). 425 Add Charsets.toCharset(String, Charset). 426 </action> 427 <action dev="ggregory" type="add" due-to="Gary Gregory"> 428 Add XmlStreamWriter(OutputStream, Charset). 429 </action> 430 <action dev="ggregory" type="add" due-to="Gary Gregory"> 431 Add PathUtils.getLastModifiedFileTime(*). 432 </action> 433 <action dev="ggregory" type="add" due-to="Gary Gregory"> 434 Add IOBiFunction, IOTriFunction, IOQuadFunction, IOPredicate, IOIterator, IOSpliterator, IOBaseStream, IOStream, FilesUncheck. 435 </action> 436 <action dev="ggregory" type="add" due-to="Gary Gregory"> 437 Add IOUtils.consume(Reader). 438 </action> 439 <action dev="ggregory" type="add" due-to="Gary Gregory"> 440 Add IOSupplier.asSupplier(). 441 </action> 442 <action dev="ggregory" type="add" due-to="Gary Gregory"> 443 Add IOFunction.asFunction(). 444 </action> 445 <action dev="ggregory" type="add" due-to="Gary Gregory"> 446 Add IOConsumer.asConsumer(). 447 </action> 448 <action dev="ggregory" type="add" due-to="Gary Gregory"> 449 Add TimestampedObserver.isClosed(). 450 </action> 451 <action dev="ggregory" type="add" due-to="Gary Gregory"> 452 IOExceptionList implements Iterable. 453 </action> 454 <action issue="IO-784" dev="ggregory" type="add" due-to="Fredrik Kjellberg, Gary Gregory"> 455 Add support for Appendable to HexDump #418. 456 </action> 457 <action dev="ggregory" type="add" due-to="DaGeRe, Gary Gregory"> 458 Add and use ThreadUtils. 459 </action> 460 <action issue="IO-786" dev="ggregory" type="add" due-to="Gary Gregory"> 461 Add UnsynchronizedFilterInputStream. 462 </action> 463 <action issue="IO-786" dev="ggregory" type="add" due-to="Gary Gregory, Benoit Tellier"> 464 Add UnsynchronizedBufferedInputStream. 465 </action> 466 <!-- UPDATE --> 467 <action dev="kinow" type="update" due-to="Dependabot, Gary Gregory"> 468 Bump actions/cache from 2.1.6 to 3.0.10 #307, #337, #393. 469 </action> 470 <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory"> 471 Bump actions/checkout from 2.3.4 to 3.1.0 #286, #298, #330, #392. 472 </action> 473 <action dev="kinow" type="update" due-to="Dependabot"> 474 Bump actions/setup-java from 2 to 3.6.0 #346, #397. 475 </action> 476 <action dev="kinow" type="update" due-to="Dependabot"> 477 Bump github/codeql-action from 1 to 2 #353. 478 </action> 479 <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory"> 480 Bump Maven Javadoc plugin from 3.2.0 to 3.4.1. 481 </action> 482 <action dev="ggregory" type="update" due-to="Dependabot"> 483 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. 484 </action> 485 <action dev="kinow" type="update" due-to="Gary Gregory, Dependabot"> 486 Bump spotbugs from 4.5.2 to 4.7.3 #313, #317, #357, #382, #398. 487 </action> 488 <action dev="ggregory" type="update" due-to="Gary Gregory"> 489 Bump JUnit from 5.7.2 to 5.8.2. 490 </action> 491 <action dev="ggregory" type="update" due-to="Dependabot"> 492 Bump maven-enforcer-plugin from 3.0.0-M3 to 3.2.1 #255, #363, #431. 493 </action> 494 <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory"> 495 Bump checkstyle from 8.44 to 9.3 #256, #257, #266, #279, #292. #308. 496 </action> 497 <action dev="ggregory" type="update" due-to="Dependabot"> 498 Bump junit-bom from 5.8.0-M1 to 5.9.1 #260, #271, #275, #309, #386. 499 </action> 500 <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory"> 501 Bump mockito-inline from 3.11.2 to 4.11.0 #262, #264, #282, #306, #314, #331, #348, #359, #381, #399, #405, #414, #420. 502 </action> 503 <action dev="ggregory" type="update" due-to="Dependabot"> 504 Bump jmh.version from 1.32 to 1.36 #258, #316, #342, #404. 505 </action> 506 <action dev="kinow" type="update" due-to="Dependabot"> 507 Bump moditect-maven-plugin from 1.0.0.RC1 to 1.0.0.RC2 #280. 508 </action> 509 <action dev="kinow" type="update" due-to="Dependabot, Gary Gregory"> 510 Bump junit-pioneer from 1.4.2 to 1.9.1 #304. #335, #362, #402, #406, #409. 511 </action> 512 <action dev="ggregory" type="update" due-to="Gary Gregory"> 513 Bump japicmp-maven-plugin from 0.15.3 to 0.16.0. 514 </action> 515 <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot"> 516 Bump commons-parent from 52 to 56 #388, #415, #421. 517 </action> 518 <action dev="ggregory" type="update" due-to="Gary Gregory"> 519 Bump jacoco-maven-plugin from 0.8.7 to 0.8.8. 520 </action> 521 <action dev="ggregory" type="update" due-to="Dependabot"> 522 Bump maven-antrun-plugin from 3.0.0 to 3.1.0 #354. 523 </action> 524 <action dev="ggregory" type="update" due-to="Gary Gregory"> 525 Bump commons.surefire.version 3.0.0-M5 to 3.0.0-M7. 526 </action> 527 <action dev="ggregory" type="update" due-to="Gary Gregory"> 528 Bump PMD from 6.44.0 to 6.52.0. 529 </action> 530 <action dev="ggregory" type="update" due-to="Gary Gregory"> 531 Bump maven-pmd-plugin from 3.16.0 to 3.19.0. 532 </action> 533 <action dev="ggregory" type="update" due-to="Gary Gregory"> 534 Bump apache-rat from 0.13 to 0.14. 535 </action> 536 <action dev="kinow" type="update" due-to="Dependabot"> 537 Bump exec-maven-plugin from 3.0.0 to 3.1.0 #369. 538 </action> 539 <action dev="kinow" type="update" due-to="Dependabot"> 540 Bump maven-checkstyle-plugin from 3.1.2 to 3.2.0 #376. 541 </action> 542 <action dev="kinow" type="update" due-to="Dependabot"> 543 Bump apache-rat-plugin from 0.14 to 0.15 #387. 544 </action> 545 </release> 546 <release version="2.11.0" date="2021-07-09" description="Java 8 required."> 547 <!-- FIX --> 548 <action issue="IO-741" dev="ggregory" type="fix" due-to="Zach Sherman"> 549 FileUtils.listFiles does not list matching files if File parameter is a symbolic link. 550 </action> 551 <action issue="IO-724" dev="ggregory" type="fix" due-to="liran2000"> 552 FileUtils#deleteDirectory(File) exception Javadoc inaccurate update #245. 553 </action> 554 <action dev="ggregory" type="fix" due-to="Arturo Bernal"> 555 Minor changes #243. 556 </action> 557 <action dev="ggregory" type="fix" due-to="Arturo Bernal"> 558 Replace construction of FileInputStream and FileOutputStream objects with Files NIO APIs. #221. 559 </action> 560 <action dev="ggregory" type="fix" due-to="Gary Gregory"> 561 Fix IndexOutOfBoundsException in IOExceptionList constructors. 562 </action> 563 <action dev="ggregory" type="fix" due-to="Gary Gregory"> 564 Remove IOException from the method signatures that no longer throw IOException. 565 This maintains binary compatibility but not source compatibility. 566 - FilenameUtils 567 directoryContains(String, String) 568 - BoundedReader 569 BoundedReader(java.io.Reader, int) 570 - IOUtils 571 lineIterator(java.io.InputStream, Charset) 572 lineIterator(java.io.InputStream, String) 573 toByteArray(String) 574 toInputStream(CharSequence, String) 575 toInputStream(String, String) 576 toString(byte[]) 577 toString(byte[], String) 578 </action> 579 <!-- ADD --> 580 <action dev="ggregory" type="update" due-to="Gary Gregory"> 581 Add SymbolicLinkFileFilter. 582 </action> 583 <action dev="ggregory" type="update" due-to="trncate"> 584 Add test to make sure the setter of AndFileFilter works correctly #244. 585 </action> 586 <action dev="ggregory" type="update" due-to="Gary Gregory"> 587 Add XmlStreamReader(Path). 588 </action> 589 <!-- UPDATE --> 590 <action dev="ggregory" type="update" due-to="Dependabot"> 591 Bump mockito-inline from 3.11.0 to 3.11.2 #247. 592 </action> 593 <action dev="ggregory" type="update" due-to="Dependabot"> 594 Bump jmh.version from 1.27 to 1.32 #237. 595 </action> 596 </release> 597 <!-- The release date is the date RC is cut --> 598 <release version="2.10.0" date="2021-06-10" description="Java 8 required."> 599 <!-- FIX --> 600 <action issue="IO-733" dev="ggregory" type="fix" due-to="Jim Sellers, Gary Gregory"> 601 RegexFileFilter uses the path and file name instead of just the file name. 602 </action> 603 <action issue="IO-734" dev="ggregory" type="fix" due-to="Eric Norman"> 604 The OSGi manifest now contains sun.* import packages #239. 605 </action> 606 <action issue="IO-585" dev="ggregory" type="fix" due-to="Adam McClenaghan"> 607 Sanitize double slash after prefix #79. 608 </action> 609 <!-- ADD --> 610 <action dev="ggregory" type="add" due-to="Gary Gregory"> 611 Add and use RegexFileFilter.toString(). 612 </action> 613 <action dev="ggregory" type="add" due-to="Gary Gregory"> 614 Add and use RegexFileFilter.RegexFileFilter(Pattern, Function<Path>, String>) 615 </action> 616 <action dev="ggregory" type="add" due-to="Gary Gregory"> 617 Add and use IOCase.isCaseSensitive(IOCase). 618 </action> 619 <!-- UPDATES --> 620 <action dev="ggregory" type="update" due-to="Dependabot"> 621 Bump actions/cache from 2.1.5 to 2.1.6 #238. 622 </action> 623 <action dev="ggregory" type="update" due-to="Dependabot"> 624 Bump junit-pioneer from 1.4.1 to 1.4.2 #240. 625 </action> 626 <action dev="ggregory" type="update" due-to="Dependabot"> 627 Bump checkstyle from 8.42 to 8.44 #241, #248. 628 </action> 629 <action dev="ggregory" type="update" due-to="Dependabot"> 630 Bump mockito-inline from 3.10.0 to 3.11.0 #242. 631 </action> 632 </release> 633 <release version="2.9.0" date="2021-05-22" description="Java 8 required."> 634 <!-- FIX --> 635 <action issue="IO-686" dev="ggregory" type="fix" due-to="Alan Moffat, Gary Gregory"> 636 IOUtils.toByteArray(InputStream) Javadoc does not match code. 637 </action> 638 <action issue="IO-689" dev="aherbert" type="fix" due-to="Uwe Schindler"> 639 FileUtils: Remove Instant->ZonedDateTime->Instant round-trip. 640 </action> 641 <action dev="ggregory" type="fix" due-to="Michael Ernst, Gary Gregory"> 642 Make FilenameUtils.equals() not throw an exception #154. 643 </action> 644 <action dev="ggregory" type="fix" due-to="Jan Peter Stotz, Bernd Eckenfels, Gary Gregory"> 645 Un-deprecate IOUtils.closeQuietly() methods. 646 </action> 647 <action dev="ggregory" type="fix" due-to="Michiel Kalkman"> 648 FileUtils#copyDirectory(File, File, FileFilter, preserveFileDate) clean up #163. 649 </action> 650 <action dev="ggregory" type="fix" due-to="Gary Gregory"> 651 AccumulatorPathVisitor does not track directories properly. 652 </action> 653 <action issue="IO-597" dev="ggregory" type="fix" due-to="Gary Gregory, Arvind, Rob Spoor"> 654 FileUtils.iterateFiles runs out of memory when executed for a directory with large number of files. 655 Re-implement FileUtils' iterateFiles(), iterateFilesAndDirs(), listFiles(), listFilesAndDirs() to use NIO 656 file tree walking instead of IO file listings to avoid memory consumption issues on large file trees. 657 </action> 658 <action dev="ggregory" type="fix" due-to="Gary Gregory"> 659 FileUtils.forceDelete(File) actually forces deletion of read-only files as it did in version 2.6. 660 </action> 661 <action issue="IO-692" dev="ebourg" type="fix" due-to="Matthew Rooney, Emmanuel Bourg"> 662 PathUtils.deleteFile() no longer throws a NoSuchFileException when applied on a symbolic link pointing 663 to a file that doesn't exist. 664 </action> 665 <action issue="IO-694" dev="ggregory" type="fix" due-to="Tan Yee Fan, Gary Gregory"> 666 Behavior change in FileUtils.copyDirectory() file last modified timestamp preservation. Match Javadoc to code. 667 </action> 668 <action issue="IO-600" dev="ggregory" type="fix" due-to="Abhyankar Chaubey, Gary Gregory"> 669 Fix getPrefixLength method for Linux filename #179. 670 </action> 671 <action issue="IO-699" dev="ggregory" type="fix" due-to="tza, Gary Gregory"> 672 Wrong logging in FileUtils.setLastModified. 673 </action> 674 <action issue="IO-686" dev="ggregory" type="fix" due-to="Alan Moffat, Sebb, Gary Gregory"> 675 IOUtils.toByteArray(InputStream) Javadoc does not match code. 676 </action> 677 <action issue="IO-688" dev="ggregory" type="fix" due-to="Michael Ernst, Gary Gregory"> 678 CopyUtils deprecation message gives wrong version. 679 </action> 680 <action issue="IO-701" dev="ggregory" type="fix" due-to="Gary Gregory"> 681 Make PathUtils.setReadOnly deal with LinuxDosFileAttributeView #186. 682 </action> 683 <action issue="IO-702" dev="ggregory" type="fix" due-to="Boris Unckel, Gary Gregory"> 684 FileUtils.forceDelete does not delete invalid links. #187. 685 </action> 686 <action issue="IO-690" dev="ggregory" type="fix" due-to="Chris Heisterkamp, Gary Gregory"> 687 IOUtils.toByteArray(null) no longer throws a NullPointerException. 688 </action> 689 <action issue="IO-705" dev="ggregory" type="fix" due-to="Hao Zhong, Gary Gregory"> 690 MarkShieldInputStream#reset should throw UnsupportedOperationException. 691 </action> 692 <action issue="IO-705" dev="ggregory" type="fix" due-to="Hao Zhong, Gary Gregory"> 693 LockableFileWriter.close() should fail when the lock file cannot be deleted. 694 </action> 695 <action issue="IO-705" dev="ggregory" type="fix" due-to="Hao Zhong, Gary Gregory"> 696 Fix infinite loops in ObservableInputStream read(*) when an exception is caught but not re-thrown. 697 </action> 698 <action issue="IO-719" dev="ggregory" type="fix" due-to="Andrew Shcheglov, Gary Gregory"> 699 Fixed error of copying directories between different file systems #203. 700 </action> 701 <action dev="ggregory" type="fix" due-to="Felix Rilling"> 702 Fix Typos in JavaDoc, Comments and Tests #201. 703 </action> 704 <action issue="IO-718" dev="ggregory" type="fix" due-to="Robert Cooper, Gary Gregory"> 705 FileUtils.checksumCRC32 and FileUtils.checksum are not thread safe. 706 </action> 707 <action issue="IO-720" dev="ggregory" type="fix" due-to="XenoAmess"> 708 Fix error about usage of DirectBuffer in JRE 16/17 #205. 709 </action> 710 <action dev="ggregory" type="fix" due-to="Rob Spoor, Gary Gregory"> 711 Prevent infinite loop with AbstractCharacterFilterReader if EOF is filtered out #226. 712 </action> 713 <action issue="IO-429" dev="ggregory" type="fix" due-to="Ivan Leskin, Ivan Leskin"> 714 Check for long streams in IOUtils.toByteArray #175. 715 </action> 716 <!-- ADD --> 717 <action dev="ggregory" type="add" due-to="Gary Gregory"> 718 Add FileSystemProviders class. 719 </action> 720 <action dev="ggregory" type="add" due-to="Gary Gregory"> 721 Let org.apache.commons.io.filefilter classes work with java.nio.file.Files.walk* APIs. 722 </action> 723 <action dev="ggregory" type="add" due-to="Gary Gregory"> 724 Let org.apache.commons.io.filefilter classes work with java.nio.file.Files#newDirectoryStream(Path, DirectoryStream.Filter). 725 </action> 726 <action issue="IO-510" dev="ggregory" type="add" due-to="Gary Gregory, Apache Spark, David Mollitor"> 727 Add and adapt ReadAheadInputStream and BufferedFileChannelInputStream from Apache Spark. 728 </action> 729 <action dev="ggregory" type="add" due-to="Gary Gregory"> 730 Add PathUtils.createParentDirectories(Path, FileAttribute...). 731 </action> 732 <action dev="ggregory" type="add" due-to="Rob Spoor, Gary Gregory"> 733 Add factory methods to CloseShieldInputStream, CloseShieldReader, CloseShieldOutputStream, CloseShieldWriter, #173. 734 </action> 735 <action dev="ggregory" type="add" due-to="maxxedev, Gary Gregory"> 736 Add QueueInputStream and QueueOutputStream as simpler alternatives to PipedInputStream and PipedOutputStream #171. 737 </action> 738 <action dev="ggregory" type="add" due-to="Gary Gregory"> 739 Add StandardLineSeparator. 740 </action> 741 <action dev="ggregory" type="add" due-to="Gary Gregory"> 742 Replace magic numbers with constants with the new IOUtils.CR and LF. 743 </action> 744 <action dev="ggregory" type="add" due-to="Gary Gregory"> 745 Add FileSystem#supportsDriveLetter(). 746 </action> 747 <action dev="ggregory" type="add" due-to="Gary Gregory"> 748 Add FileUtils.delete(File). 749 </action> 750 <action issue="IO-700" dev="ggregory" type="add" due-to="Gary Gregory"> 751 Add FileUtils.moveFile(File, File, CopyOption...) #185. 752 </action> 753 <action issue="IO-700" dev="ggregory" type="add" due-to="Gary Gregory"> 754 Add FileUtils.isEmptyDirectory(File). 755 </action> 756 <action dev="ggregory" type="add" due-to="Gary Gregory"> 757 Add FileUtils.lastModified[Unchecked](File) to workaround https://bugs.openjdk.java.net/browse/JDK-8177809. 758 </action> 759 <action issue="IO-709" dev="ggregory" type="add" due-to="Boris Unckel, Gary Gregory"> 760 Add null safe variants of isDirectory and isRegularFile. 761 </action> 762 <action dev="ggregory" type="add" due-to="Gary Gregory"> 763 Add and use IOExceptionList(String, List). 764 </action> 765 <action dev="ggregory" type="add" due-to="Gary Gregory"> 766 Add and use ObservableInputStream.ObservableInputStream(InputStream, Observer...). 767 </action> 768 <action dev="ggregory" type="add" due-to="Gary Gregory"> 769 Make ObservableInputStream.getObservers() public. 770 </action> 771 <action issue="IO-706" dev="ggregory" type="add" due-to="Gary Gregory"> 772 Add TimestampedObserver. 773 </action> 774 <action dev="ggregory" type="add" due-to="Gary Gregory"> 775 Add and use IOUtils.byteArray(*). 776 </action> 777 <action dev="ggregory" type="add" due-to="Gary Gregory"> 778 Make public and reuse IOUtils.EMPTY_BYTE_ARRAY. 779 </action> 780 <action dev="ggregory" type="add" due-to="Gary Gregory"> 781 Add IOUtils.copy(URL, File). 782 </action> 783 <action dev="ggregory" type="add" due-to="Gary Gregory"> 784 Add copy(URL, OutputStream). 785 </action> 786 <action issue="IO-651" dev="ggregory" type="add" due-to="jmark109, Gary Gregory"> 787 Add DeferredFileOutputStream.toInputStream() #206. 788 </action> 789 <action dev="ggregory" type="add" due-to="Gary Gregory"> 790 Add CharacterSetFilterReader.CharacterSetFilterReader(Reader, Integer...). 791 </action> 792 <action dev="ggregory" type="add" due-to="Rob Spoor, Gary Gregory"> 793 Add AbstractCharacterFilterReader(Reader, IntPredicate), #227. 794 Add CharacterFilterReader(Reader, IntPredicate), #227. 795 Add CharacterFilterReaderIntPredicateTest, #227. 796 </action> 797 <action dev="ggregory" type="add" due-to="Gary Gregory"> 798 Add IOConsumer.noop(). 799 </action> 800 <action dev="ggregory" type="add" due-to="Gary Gregory"> 801 Add constructor ThresholdingOutputStream(int, IOConsumer, IOFunction) and make the class concrete. 802 </action> 803 <action dev="ggregory" type="add" due-to="nstdspace, Gary Gregory"> 804 Add constructor accepting collection of file alteration observers #236. 805 </action> 806 <!-- UPDATES --> 807 <action dev="ggregory" type="update" due-to="Dependabot"> 808 Update junit-jupiter from 5.6.2 to 5.7.0 #153. 809 </action> 810 <action dev="ggregory" type="update" due-to="Dependabot"> 811 Update mockito-core from 3.5.9 to 3.10.0, #152, #155, #157, #166, #167, #169, #182. 812 </action> 813 <action dev="ggregory" type="update" due-to="Dependabot"> 814 Bump mockito-inline from 3.7.0 to 3.10.0 #188, #207, #230. 815 </action> 816 <action dev="ggregory" type="update" due-to="Gary Gregory"> 817 Update commons.jacoco.version 0.8.5 to 0.8.7, fixes Java 15 builds and up. 818 </action> 819 <action dev="ggregory" type="update" due-to="Dependabot"> 820 Update spotbugs from 4.1.2 to 4.5.0, #158, #164, #165, #180, #199, #213, #224, #302. 821 </action> 822 <action dev="ggregory" type="update" due-to="Dependabot"> 823 Bump spotbugs-maven-plugin from 4.0.4 to 4.2.3, #161, #172, #223. 824 </action> 825 <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot"> 826 Update org.junit-pioneer:junit-pioneer 0.9.0 -> 1.4,1, #159, #162, #170, #189, #191, #210, #229. 827 </action> 828 <action dev="ggregory" type="update" due-to="Dependabot"> 829 Update actions/checkout from v2.3.2 to v2.3.4, #156, #168. 830 </action> 831 <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory"> 832 Bump actions/setup-java from v1.4.2 to v2 #160. 833 </action> 834 <action dev="ggregory" type="update" due-to="Gary Gregory"> 835 Update maven-surefire-plugin from 2.22.2 to 3.0.0-M5. 836 </action> 837 <action dev="ggregory" type="update" due-to="Arturo Bernal"> 838 Minor improvements, #176, 177, #190. 839 </action> 840 <action dev="ggregory" type="update" due-to="Gary Gregory"> 841 Update commons.japicmp.version 0.14.4 -> 0.15.3. 842 </action> 843 <action dev="ggregory" type="update" due-to="Michiel Kalkman"> 844 Tiny performance improvement in FileUtils#moveDirectoryToDirectory() #174. 845 </action> 846 <action dev="ggregory" type="update" due-to="Dependabot"> 847 Bump checkstyle from 8.38 to 8.42 #689, #209, #225. 848 </action> 849 <action dev="ggregory" type="update" due-to="Dependabot"> 850 Bump maven-checkstyle-plugin from 3.1.1 to 3.1.2 #198. 851 </action> 852 <action dev="ggregory" type="update" due-to="Dependabot"> 853 Bump jimfs from 1.1 to 1.2 #183. 854 </action> 855 <action dev="ggregory" type="update" due-to="XenoAmess, Gary Gregory"> 856 Improve performance of IOUtils.contentEquals(InputStream, InputStream). 857 </action> 858 <action dev="ggregory" type="update" due-to="XenoAmess, Gary Gregory"> 859 Improve performance of IOUtils.contentEquals(Reader, Reader). 860 </action> 861 <action dev="ggregory" type="update" due-to="Dependabot"> 862 Bump actions/cache from v2 to v2.1.5 #202, #228. 863 </action> 864 <action dev="ggregory" type="update" due-to="Dependabot"> 865 Bump junit-bom from 5.7.0 to 5.7.2 #200, #232. 866 </action> 867 <action type="update" dev="ggregory" due-to="Gary Gregory"> 868 Update from Apache Commons Lang 3.11 to 3.12.0. 869 </action> 870 <action type="update" dev="ggregory" due-to="Arturo Bernal"> 871 Minor improvements #233. 872 </action> 873 <action type="update" dev="ggregory" due-to="Arturo Bernal"> 874 Simplify Assertions in tests #234. 875 </action> 876 </release> 877 <!-- The release date is the date RC is cut --> 878 <release version="2.8.0" date="2020-09-05" description="Java 8 required."> 879 <action dev="ggregory" type="add" due-to="Gary Gregory"> 880 Add org.apache.commons.io.input.CircularInputStream. 881 </action> 882 <action dev="ggregory" type="add" due-to="Gary Gregory"> 883 Add org.apache.commons.io.file.PathUtils.cleanDirectory(Path, FileVisitOption...). 884 </action> 885 <action dev="ggregory" type="add" due-to="Gary Gregory"> 886 Add org.apache.commons.io.file.PathUtils.deleteDirectory(Path, FileVisitOption...). 887 </action> 888 <action dev="ggregory" type="add" due-to="Gary Gregory"> 889 Add NullAppendable. 890 </action> 891 <action dev="ggregory" type="fix" due-to="Rob Spoor, Jochen Wiedmann"> 892 CharSequenceReader.skip should return 0 instead of EOF on stream end #123. 893 </action> 894 <action dev="ggregory" type="fix" due-to="Rob Spoor"> 895 Implement CharSequenceReader.ready() #122. 896 </action> 897 <action issue="IO-669" dev="ggregory" type="fix" due-to="XenoAmess, Gary Gregory"> 898 Fix code smells; fix typos #115. 899 </action> 900 <action dev="ggregory" type="fix" due-to="Jerome Wolff, Gary Gregory"> 901 Add caching for required charsets #120. 902 </action> 903 <action issue="IO-673" type="fix" dev="ggregory" due-to="Jerome Wolff"> 904 Make some simplifications #121. 905 </action> 906 <action issue="IO-674" dev="ggregory" type="fix" due-to="Gary Gregory"> 907 InfiniteCircularInputStream is not infinite if its input buffer contains -1. 908 </action> 909 <action issue="IO-675" dev="ggregory" type="fix" due-to="Gary Gregory"> 910 InfiniteCircularInputStream throws a divide-by-zero exception when reading if its input buffer is size 0. 911 </action> 912 <action issue="IO-677" dev="ggregory" type="fix" due-to="Gary Gregory"> 913 FileSystem.getCurrent() does not return the correct enum. 914 </action> 915 <action issue="IO-679" dev="ggregory" type="fix" due-to="proneel"> 916 input.AbstractCharacterFilterReader passes count of chars read #132. 917 </action> 918 <action dev="ggregory" type="add" due-to="Gary Gregory"> 919 Add PathUtils.getAclEntryList(Path). 920 </action> 921 <action dev="ggregory" type="add" due-to="Gary Gregory"> 922 Null-guard IOUtils.close(Closeable, IOConsumer). 923 </action> 924 <action dev="ggregory" type="add" due-to="Gary Gregory"> 925 Add ReversedLinesFileReader.readLines(int). 926 </action> 927 <action dev="ggregory" type="add" due-to="Gary Gregory"> 928 Add ReversedLinesFileReader.toString(int). 929 </action> 930 <action issue="IO-684" dev="ggregory" type="add" due-to="Gary Gregory, Robin Jansohn"> 931 Add PathUtils.delete(Path, DeleteOption...). 932 Add PathUtils.deleteDirectory(Path, DeleteOption...). 933 Add PathUtils.deleteFile(Path, DeleteOption...). 934 Add PathUtils.setReadOnly(Path, boolean, LinkOption...). 935 Add CleaningPathVisitor.CleaningPathVisitor(PathCounters, DeleteOption[], String...). 936 Add DeletingPathVisitor.DeletingPathVisitor(PathCounters, DeleteOption[], String...). 937 </action> 938 <action issue="IO-683" dev="sebb" type="fix"> 939 CircularBufferInputStream.read() fails to convert byte to unsigned int 940 </action> 941 <action dev="ggregory" type="fix" due-to="Gary Gregory"> 942 Fix SpotBugs issues in org.apache.commons.io.FileUtils. 943 </action> 944 <action dev="ggregory" type="add" due-to="Gary Gregory"> 945 Add RandomAccessFileInputStream. 946 </action> 947 <action issue="IO-681" dev="sebb" type="add"> 948 IOUtils.close(Closeable) should allow a list of closeables. 949 </action> 950 <action issue="IO-672" dev="sebb" type="fix"> 951 Copying a File sets last modified date to 01 January 1970. 952 </action> 953 <action dev="ggregory" type="add" due-to="Gary Gregory"> 954 Add IOUtils.consume(InputStream). 955 </action> 956 <action issue="IO-676" dev="ggregory" type="add" due-to="Isira Seneviratne, Gary Gregory"> 957 Add isFileNewer() and isFileOlder() methods that support the Java 8 Date/Time API. #124. 958 </action> 959 <action issue="IO-676" dev="ggregory" type="fix" due-to="Michael Ernst, Gary Gregory"> 960 Prevent NullPointerException in ReversedLinesFileReader constructors #117. 961 </action> 962 <action dev="ggregory" type="add" due-to="Adam Retter, Gary Gregory"> 963 Add a MarkShieldInputStream #119. 964 </action> 965 <!-- UPDATES --> 966 <action dev="ggregory" type="add" due-to="Gary Gregory"> 967 Deprecate IOUtils.LINE_SEPARATOR in favor of Java 7's System.lineSeparator(). 968 </action> 969 <action dev="ggregory" type="update" due-to="Gary Gregory"> 970 Replace FindBugs with SpotBugs. 971 </action> 972 <action dev="ggregory" type="update" due-to="Gary Gregory"> 973 maven-checkstyle-plugin 3.1.0 -> 3.1.1. 974 </action> 975 <action dev="ggregory" type="update" due-to="Gary Gregory"> 976 Update tests from org.apache.commons:commons-lang3 3.10 to 3.11. 977 </action> 978 <action dev="ggregory" type="update" due-to="Gary Gregory"> 979 Update commons-parent from 50 to 51 #129. 980 </action> 981 <action dev="ggregory" type="update" due-to="Gary Gregory"> 982 Update actions/checkout from v1 to v2.3.1 #126. 983 </action> 984 <action dev="ggregory" type="update" due-to="Gary Gregory"> 985 Update junit-pioneer from 0.6.0 to 0.9.0, #127, #135, #138. 986 </action> 987 <action dev="ggregory" type="update" due-to="Gary Gregory"> 988 Update mockito-core from 3.3.3 to 3.5.9 #128, #133, #145, #149, #151. 989 </action> 990 <action dev="ggregory" type="update" due-to="Dependabot"> 991 Update spotbugs from 4.0.6 to 4.6.0 #134, #332. 992 </action> 993 <action dev="ggregory" type="update" due-to="Dependabot"> 994 Update actions/checkout from v2.3.1 to v2.3.2 #140. 995 </action> 996 <action dev="ggregory" type="update" due-to="Dependabot"> 997 Update actions/setup-java from v1.4.0 to v1.4.2 #141, #148. 998 </action> 999 <action type="update" dev="ggregory" due-to="Gary Gregory"> 1000 Update com.github.siom79.japicmp:japicmp-maven-plugin 0.14.3 -> 0.14.4. 1001 </action> 1002 </release> 1003 <!-- The release date is the date RC is cut --> 1004 <release version="2.7" date="2020-05-24" description="Java 8 required."> 1005 <action issue="IO-589" dev="sebb" type="fix"> 1006 Some tests fail if the base path contains a space. 1007 </action> 1008 <action dev="jochen" type="add"> 1009 Adding the CircularBufferInputStream, and the PeekableInputStream. 1010 </action> 1011 <action issue="IO-582" dev="jochen" type="fix" due-to="Bruno Palos"> 1012 Make methods in ObservableInputStream.Observer public. 1013 </action> 1014 <action issue="IO-535" dev="pschumacher" type="fix" due-to="Svetlin Zarev, Anthony Raymond"> 1015 Thread bug in FileAlterationMonitor#stop(int). 1016 </action> 1017 <action issue="IO-553" dev="ggregory" type="add"> 1018 Add org.apache.commons.io.FilenameUtils.isIllegalWindowsFileName(char). 1019 </action> 1020 <action issue="IO-557" dev="pschumacher" type="fix" due-to="luccioman"> 1021 Perform locale independent upper case conversions. 1022 </action> 1023 <action issue="IO-570" dev="ggregory" type="fix" due-to="Pranet Verma"> 1024 Missing Javadoc in FilenameUtils causing Travis-CI build to fail. 1025 </action> 1026 <action issue="IO-571" dev="ggregory" type="fix" due-to="pranet"> 1027 Remove redundant isDirectory() check in org.apache.commons.io.FileUtils.listFilesAndDirs(File, IOFileFilter, IOFileFilter). 1028 </action> 1029 <action issue="IO-572" dev="ggregory" type="update" due-to="Pranet Verma"> 1030 Refactor duplicate code in org.apache.commons.io.FileUtils. 1031 </action> 1032 <action issue="IO-577" dev="ggregory" type="add" due-to="Gary Gregory"> 1033 Add readers to filter out given characters: CharacterSetFilterReader and CharacterFilterReader. 1034 </action> 1035 <action issue="IO-559" type="fix"> 1036 FilenameUtils.normalize now verifies hostname syntax in UNC path. 1037 </action> 1038 <action issue="IO-580" dev="ggregory" type="update"> 1039 Update org.apache.commons.io.FilenameUtils.isExtension(String, String[]) to use var args. 1040 </action> 1041 <action issue="IO-554" dev="ggregory" type="fix" due-to="Michele Mariotti"> 1042 FileUtils.copyToFile(InputStream source, File destination) should not close input stream. 1043 </action> 1044 <action issue="IO-594" dev="ggregory" type="add" due-to="Gary Gregory"> 1045 Add IOUtils copy methods with java.lang.Appendable as the target. 1046 </action> 1047 <action issue="IO-604" dev="ggregory" type="fix" due-to="Gary Gregory"> 1048 FileUtils.doCopyFile(File, File, boolean) can throw ClosedByInterruptException. 1049 </action> 1050 <action issue="IO-605" dev="ggregory" type="add" due-to="Gary Gregory"> 1051 Add class CanExecuteFileFilter. 1052 </action> 1053 <action issue="IO-701" dev="ggregory" type="update" due-to="Raymond Tan"> 1054 Make array declaration in ThresholdingOutputStream consistent with other array declarations in the library #77. 1055 </action> 1056 <action issue="IO-578" dev="ggregory" type="add" due-to="Mark Chesney"> 1057 Support java.nio.Path and non-default file systems for ReversedLinesFileReader (#62). 1058 </action> 1059 <action issue="IO-608" dev="ggregory" type="add" due-to="Gary Gregory"> 1060 Add a convenience NullPrintStream. 1061 </action> 1062 <action issue="IO-607" dev="ggregory" type="update" due-to="Gary Gregory"> 1063 Update from Java 7 to Java 8. 1064 </action> 1065 <action issue="IO-610" dev="ggregory" type="update" due-to="Sebastian"> 1066 Remove throws IOException in method isSymlink() #80. 1067 </action> 1068 <action issue="IO-612" dev="ggregory" type="add" due-to="Rob Spoor, Gary Gregory"> 1069 Add class TeeReader. 1070 </action> 1071 <action issue="IO-613" dev="ggregory" type="add" due-to="Rob Spoor, Gary Gregory"> 1072 Add classes ClosedReader and CloseShieldReader. #84. 1073 </action> 1074 <action issue="IO-614" dev="ggregory" type="add" due-to="Rob Spoor"> 1075 Add classes TaggedWriter, ClosedWriter and BrokenWriter. #86. 1076 </action> 1077 <action issue="IO-615" dev="ggregory" type="add" due-to="Gary Gregory, Rob Spoor"> 1078 Add classes TeeWriter, FilterCollectionWriter, ProxyCollectionWriter, IOExceptionList, IOIndexedException. 1079 </action> 1080 <action issue="IO-616" dev="ggregory" type="add" due-to="Rob Spoor"> 1081 Add class AppendableWriter. #87. 1082 </action> 1083 <action issue="IO-617" dev="ggregory" type="add" due-to="Rob Spoor, Gary Gregory"> 1084 Add class CloseShieldWriter. #83. 1085 </action> 1086 <action issue="IO-618" dev="ggregory" type="add" due-to="Rob Spoor"> 1087 Add classes Added TaggedReader, ClosedReader and BrokenReader. #85. 1088 </action> 1089 <action issue="IO-619" dev="ggregory" type="add" due-to="Rob Spoor"> 1090 Support sub sequences in CharSequenceReader. #91. 1091 </action> 1092 <action issue="IO-625" dev="ggregory" type="fix" due-to="Mikko Maunu"> 1093 Corrected misleading exception message for FileUtils.copyDirectoryToDirectory. 1094 </action> 1095 <action issue="IO-626" dev="ggregory" type="fix" due-to="Yuji Konishi"> 1096 A mistake in the FilenameUtils.concat()'s Javadoc about an absolute path. 1097 </action> 1098 <action issue="IO-628" dev="ggregory" type="update" due-to="Allon Mureinik"> 1099 Migration to JUnit Jupiter #97. 1100 </action> 1101 <action issue="IO-630" dev="ggregory" type="update" due-to="Gary Gregory"> 1102 Deprecate org.apache.commons.io.output.NullOutputStream.NullOutputStream() in favor of org.apache.commons.io.output.NullOutputStream.NULL_OUTPUT_STREAM. 1103 </action> 1104 <action issue="IO-631" dev="ggregory" type="add" due-to="Gary Gregory"> 1105 Add a CountingFileVisitor (as the basis for a forthcoming DeletingFileVisitor). 1106 </action> 1107 <action issue="IO-632" dev="ggregory" type="add" due-to="Gary Gregory"> 1108 Add PathUtils for operations on NIO Path. 1109 </action> 1110 <action issue="IO-633" dev="ggregory" type="add" due-to="Gary Gregory"> 1111 Add DeletingFileVisitor. 1112 </action> 1113 <action issue="IO-629" dev="ggregory" type="update" due-to="Ian Springer, Ian Springer, Gary Gregory"> 1114 FileUtils#forceDelete should use Files#delete rather than File#delete so exception messages includes reason for failure. 1115 </action> 1116 <action issue="IO-634" dev="ggregory" type="update" due-to="Václav Haisman, Bruno P. Kinoshita, Gary Gregory"> 1117 Make getCause synchronized and use a Deque instead of a Stack #64. 1118 </action> 1119 <action issue="IO-635" dev="ggregory" type="add" due-to="Gary Gregory"> 1120 Add org.apache.commons.io.IOUtils.close(Closeable). 1121 </action> 1122 <action issue="IO-636" dev="ggregory" type="add" due-to="Gary Gregory"> 1123 Add and reuse org.apache.commons.io.IOUtils.closeQuitely(Closeable, Consumer<IOException>). 1124 Add and reuse org.apache.commons.io.IOUtils.close(Closeable, IOConsumer<IOException>). 1125 </action> 1126 <action issue="IO-640" dev="ggregory" type="fix" due-to="Gary Gregory"> 1127 NPE in org.apache.commons.io.IOUtils.contentEquals(InputStream, InputStream) when only one input is null. 1128 </action> 1129 <action issue="IO-641" dev="ggregory" type="fix" due-to="Gary Gregory"> 1130 NPE in org.apache.commons.io.IOUtils.contentEquals(Reader, Reader) when only one input is null. 1131 </action> 1132 <action issue="IO-643" dev="ggregory" type="fix" due-to="Gary Gregory"> 1133 NPE in org.apache.commons.io.IOUtils.contentEqualsIgnoreEOL(Reader, Reader) when only one input is null. 1134 </action> 1135 <action issue="IO-644" dev="ggregory" type="fix" due-to="Gary Gregory"> 1136 NPE in org.apache.commons.io.FileUtils.contentEqualsIgnoreEOL(File, File) when only one input is null. 1137 </action> 1138 <action issue="IO-645" dev="ggregory" type="add" due-to="Gary Gregory"> 1139 Add org.apache.commons.io.file.PathUtils.fileContentEquals(Path, Path, OpenOption...). 1140 </action> 1141 <action issue="IO-458" dev="ggregory" type="add" due-to="Gary Gregory, Joshua Gitlin"> 1142 Add a SequenceReader similar to java.io.SequenceInputStream. 1143 </action> 1144 <action issue="IO-648" dev="ggregory" type="add" due-to="Gary Gregory"> 1145 Implement directory content equality. 100#. 1146 </action> 1147 <action type="update" dev="ggregory" due-to="Gary Gregory"> 1148 Update tests from Apache Commons Lang 3.9 to 3.10. 1149 </action> 1150 <action type="update" dev="ggregory" due-to="Gary Gregory"> 1151 Update tests org.junit-pioneer:junit-pioneer 0.3.0 -> 0.6.0. 1152 </action> 1153 <action type="update" dev="ggregory" due-to="Gary Gregory"> 1154 Update tests org.junit.jupiter:junit-jupiter 5.5.2 -> 5.6.2. 1155 </action> 1156 <action type="update" dev="ggregory" due-to="Gary Gregory"> 1157 Update tests org.mockito:mockito-core 3.0.0 -> 3.3.3. 1158 </action> 1159 <action issue="IO-648" dev="ggregory" type="add" due-to="Adam Retter, Alex Herbert, Gary Gregory"> 1160 Refactor ByteArrayOutputStream into synchronized and unsynchronized versions #108. 1161 </action> 1162 <action issue="IO-662" dev="ggregory" type="add" due-to="Adam Retter, Gary Gregory"> 1163 Refactor ByteArrayOutputStream into synchronized and unsynchronized versions #108. 1164 </action> 1165 <action issue="IO-664" dev="ggregory" type="fix" due-to="Gary Gregory"> 1166 org.apache.commons.io.FileUtils.copyURLToFile(*) open but do not close streams. 1167 </action> 1168 <action issue="IO-666" dev="ggregory" type="update" due-to="Gary Gregory"> 1169 Normalize internal buffers to 8192 bytes. 1170 </action> 1171 <action issue="IO-665" dev="ggregory" type="update" due-to="Otto Fowler, Gary Gregory"> 1172 Ensure that passing a null InputStream results in NPE with tests #112. 1173 </action> 1174 <action type="update" dev="ggregory" due-to="Gary Gregory"> 1175 commons.jacoco.version 0.8.4 -> 0.8.5. 1176 </action> 1177 <action type="update" dev="ggregory" due-to="Gary Gregory"> 1178 com.github.siom79.japicmp:japicmp-maven-plugin 0.14.1 -> 0.14.3. 1179 </action> 1180 <action issue="IO-667" dev="ggregory" type="update" due-to="Adam Retter, Gary Gregory"> 1181 Add functional interfaces IOFunction and IOSupplier #110. 1182 </action> 1183 <action dev="ggregory" type="update" due-to="Rob Spoor, Gary Gregory"> 1184 Support sub sequences in CharSequenceReader #91. 1185 </action> 1186 <action dev="ggregory" type="update" due-to="dengliming"> 1187 Remove deprecated sudo setting. #113. 1188 </action> 1189 </release> 1190 1191 <release version="2.6" date="2017-10-15" description="Java 7 required, Java 9 supported."> 1192 <action issue="IO-553" dev="britter" type="update" due-to="Michael Ernst"> 1193 Make code style of hasBOM() consistent with getBOMCharsetName() 1194 </action> 1195 <action issue="IO-546" dev="pschumacher" type="fix" due-to="Tomas Celaya"> 1196 ClosedOutputStream#flush should throw 1197 </action> 1198 <action issue="IO-551" dev="britter" type="add"> 1199 Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility 1200 </action> 1201 <action issue="IO-550" dev="kinow" type="fix" due-to="Jimi Adrian"> 1202 Documentation issue, fix 404 Javadoc issues in the description page 1203 </action> 1204 <action issue="IO-542" dev="pschumacher" type="update" due-to="Ilmars Poikans"> 1205 FileUtils#readFileToByteArray: optimize reading of files with known size 1206 </action> 1207 <action issue="IO-547" dev="ggregory" type="update" due-to="Nikhil Shinde, Michael Ernst, Gary Greory"> 1208 Throw a IllegalArgumentException instead of NullPointerException in FileSystemUtils.freeSpaceWindows(). 1209 </action> 1210 <action issue="IO-367" dev="pschumacher" type="add" due-to="James Sawle"> 1211 Add convenience methods for copyToDirectory 1212 </action> 1213 <action issue="IO-442" dev="pschumacher" type="fix" due-to="Simon Robinson"> 1214 Javadoc contradictory for FileFilterUtils.ageFileFilter(cutoff) and the filter it constructs: AgeFileFilter(cutoff) 1215 </action> 1216 <action issue="IO-534" dev="sebb" type="fix"> 1217 FileUtilTestCase.testForceDeleteDir() should not delete testDirectory parent 1218 </action> 1219 <action issue="IO-528" dev="pschumacher" type="fix" due-to="Dave Moten"> 1220 fix Tailer.run race condition runaway logging 1221 </action> 1222 <action issue="IO-483" dev="kinow" type="fix" due-to="Marko Vasic"> 1223 getPrefixLength return -1 if Unix file contains colon 1224 </action> 1225 <action issue="IO-520" dev="pschumacher" type="fix"> 1226 FileUtilsTestCase#testContentEqualsIgnoreEOL fails on Windows 1227 </action> 1228 <action issue="IO-516" dev="pschumacher" type="fix" due-to="Jason Pyeron"> 1229 .gitattributes not correctly applied 1230 </action> 1231 <action issue="IO-515" dev="ggregory" type="fix" due-to="Brett Lounsbury, Gary Gregory"> 1232 Allow Specifying Initial Buffer Size of DeferredFileOutputStream. 1233 </action> 1234 <action issue="IO-512" dev="ggregory" type="fix" due-to="Ralf Hauser"> 1235 ThresholdingOutputStream.thresholdReached() results in FileNotFoundException. 1236 </action> 1237 <action issue="IO-511" dev="britter" type="fix" due-to="Ahmet Celik"> 1238 After a few unit tests, a few newly created directories not cleaned completely. 1239 </action> 1240 <action issue="IO-502" dev="ggregory" type="fix" due-to="Christian Schulte"> 1241 Exceptions are suppressed incorrectly when copying files. 1242 </action> 1243 <action issue="IO-503" dev="ggregory" type="fix"> 1244 Update platform requirement to Java 7. 1245 </action> 1246 <action issue="IO-537" dev="ggregory" type="fix" due-to="Borys Zibrov"> 1247 BOMInputStream shouldn't sort array of BOMs in-place. 1248 </action> 1249 <action issue="IO-506" dev="ggregory" type="update" due-to="Christian Schulte"> 1250 Deprecate methods FileSystemUtils.freeSpaceKb(). 1251 </action> 1252 <action issue="IO-505" dev="ggregory" type="update" due-to="Christian Schulte"> 1253 Make LineIterator implement Closeable to support try-with-resources statements. 1254 </action> 1255 <action issue="IO-504" dev="ggregory" type="update" due-to="Christian Schulte"> 1256 Deprecated of all IOUtils.closeQuietly() methods and use try-with-resources internally. 1257 </action> 1258 <action issue="IO-493" dev="pschumacher" type="add" due-to="Piotr Turski"> 1259 Add infinite circular input stream 1260 </action> 1261 <action issue="IO-507" dev="ggregory" type="add"> 1262 Add a ByteOrderParser class. 1263 </action> 1264 <action issue="IO-518" dev="jochen" type="add"> 1265 Add ObservableInputStream 1266 </action> 1267 <action issue="IO-519" dev="jochen" type="add"> 1268 Add MessageDigestCalculatingInputStream 1269 </action> 1270 <action issue="IO-513" dev="ggregory" type="add" due-to="Behrang Saeedzadeh"> 1271 Add convenience methods for reading class path resources. 1272 </action> 1273 <action issue="IO-514" dev="pschumacher" type="remove"> 1274 Remove org.apache.commons.io.Java7Support 1275 </action> 1276 <action issue="IO-567" dev="jochen" type="fix"> 1277 Implement special case handling for NTFS ADS names: FilenameUtils.getExtension(String), 1278 and FilenameUtils.indexOfExtension(String) are now throwing an IllegalArgumentException, 1279 if the file name in question appears to identify an alternate data stream (Windows only). 1280 </action> 1281 </release> 1282 1283 <release version="2.5" date="2016-04-22" description="New features and bug fixes."> 1284 <action issue="IO-492" dev="ggregory" type="fix" due-to="Santiago Castro"> 1285 Typo: In an IOUtils.java comment it says "focussed" instead of "focused". 1286 </action> 1287 <action issue="IO-433" dev="krosenvold" type="update"> 1288 Converted all test cases to JUnit 4 1289 </action> 1290 <action issue="IO-487" dev="bdelacretaz" type="add"> 1291 Add ValidatingObjectInputStream for controlled deserialization 1292 </action> 1293 <action issue="IO-446" dev="krosenvold" type="fix" due-to="Jeffrey Barrus"> 1294 adds an endOfFileReached method to the TailerListener 1295 </action> 1296 <action issue="IO-484" dev="krosenvold" type="fix" due-to="Philippe Arteau"> 1297 FilenameUtils should handle embedded null bytes 1298 </action> 1299 <action issue="IO-481" dev="krosenvold" type="fix"> 1300 Changed/Corrected algorithm for waitFor 1301 </action> 1302 <action issue="IO-471" dev="krosenvold" type="add" due-to="Leandro Reis"> 1303 Support for additional encodings in ReversedLinesFileReader 1304 </action> 1305 <action issue="IO-428" dev="krosenvold" type="fix" due-to="Stefan Gmeiner"> 1306 BOMInputStream.skip returns wrong count if stream contains no BOM 1307 </action> 1308 <action issue="IO-425" dev="krosenvold" type="add" due-to="Craig Swank"> 1309 Setter method for threshold on ThresholdingOutputStream 1310 </action> 1311 <action issue="IO-488" dev="krosenvold" type="fix" due-to="Björn Buchner"> 1312 FileUtils.waitFor(...) swallows thread interrupted status 1313 </action> 1314 <action issue="IO-452" dev="krosenvold" type="fix" due-to="David Standish"> 1315 Support for symlinks with missing target. Added support for JDK7 symlink features when present 1316 </action> 1317 <action issue="IO-466" dev="krosenvold" type="update"> 1318 Added testcase to show this was fixed with IO-423 1319 </action> 1320 <action issue="IO-479" dev="sebb" type="update" due-to="Zhouce Chen"> 1321 Correct exception message in FileUtils.getFile(File, String...) 1322 </action> 1323 <action issue="IO-406" dev="britter" type="add" due-to="Niall Pemberton"> 1324 Introduce new class AppendableOutputStream 1325 </action> 1326 <action issue="IO-465" dev="britter" type="update" due-to="based2"> 1327 Update to JUnit 4.12 1328 </action> 1329 <action issue="IO-462" dev="sebb" type="update"> 1330 IOExceptionWithCause no longer needed 1331 </action> 1332 <action issue="IO-459" dev="olamy" type="add" due-to="Kristian Rosenvold"> 1333 Add WindowsLineEndingInputStream and UnixLineEndingInputStream. 1334 </action> 1335 <action issue="IO-457" dev="olamy" type="add" due-to="Kristian Rosenvold"> 1336 Add a BoundedReader, a wrapper that can be used to constrain access 1337 to an underlying stream when used with mark/reset - 1338 to avoid overflowing the mark limit of the underlying buffer. 1339 </action> 1340 <action issue="IO-453" dev="sebb" type="fix" due-to="Steven Christou"> 1341 Regression in FileUtils.readFileToString from 2.0.1 1342 </action> 1343 <action issue="IO-451" dev="sebb" type="fix" due-to="David Standish"> 1344 ant test fails - resources missing from test classpath 1345 </action> 1346 <action issue="IO-435" dev="tn" type="fix" due-to="Dominik Stadler"> 1347 Document that FileUtils.deleteDirectory, directoryContains and cleanDirectory 1348 may throw an IllegalArgumentException in case the passed directory does not 1349 exist or is not a directory. 1350 </action> 1351 <action issue="IO-426" dev="ggregory" type="add"> 1352 Add API IOUtils.closeQuietly(Closeable...) 1353 </action> 1354 <action issue="IO-424" dev="ggregory" type="fix" due-to="Ville Skyttä"> 1355 Javadoc fixes, mostly to appease 1.8.0 1356 </action> 1357 <action issue="IO-422" dev="ggregory" type="update"> 1358 Deprecate Charsets Charset constants in favor of Java 7's java.nio.charset.StandardCharsets 1359 </action> 1360 <action issue="IO-410" dev="sebb" type="add" due-to="Beluga Behr"> 1361 Readfully() That Returns A Byte Array 1362 </action> 1363 <action issue="IO-395" dev="brentworden" type="add" due-to="Beluga Behr"> 1364 Overload IOUtils buffer methods to accept buffer size 1365 </action> 1366 <action issue="IO-389" dev="sebb" type="fix" due-to="Austin Doupnik"> 1367 FileUtils.sizeOfDirectory can throw IllegalArgumentException 1368 </action> 1369 <action issue="IO-390" dev="sebb" type="fix"> 1370 FileUtils.sizeOfDirectoryAsBigInteger can overflow. 1371 Ensure that recursive calls all use BigInteger 1372 </action> 1373 <action issue="IO-382" dev="sebb" type="add"> 1374 Chunked IO for large arrays. 1375 Added writeChunked(byte[], OutputStream) and writeChunked(char[] Writer) 1376 Added ChunkedOutputStream, ChunkedWriter 1377 </action> 1378 <action issue="IO-385" dev="sebb" type="fix"> 1379 FileUtils.doCopyFile can potentially loop forever 1380 Exit loop if no data to copy 1381 </action> 1382 <action issue="IO-383" dev="sebb" type="fix"> 1383 FileUtils.doCopyFile caches the file size; needs to be documented 1384 Added Javadoc; show file lengths in exception message 1385 </action> 1386 <action issue="IO-239" dev="sebb" type="update"> 1387 Convert IOCase to a Java 1.5+ Enumeration 1388 [N.B. this is binary compatible] 1389 </action> 1390 <action issue="IO-233" dev="sebb" type="add"> 1391 Add Methods for Buffering Streams/Writers To IOUtils 1392 Added overloaded buffer() methods - see also IO-330 1393 </action> 1394 <action issue="IO-330" dev="sebb" type="add"> 1395 IOUtils#toBufferedOutputStream/toBufferedWriter to conditionally wrap the output 1396 Added overloaded buffer() methods - see also IO-233 1397 </action> 1398 <action issue="IO-381" dev="ggregory" type="add"> 1399 Add FileUtils.copyInputStreamToFile API with option to leave the source open. 1400 See copyInputStreamToFile(final InputStream source, final File destination, boolean closeSource) 1401 </action> 1402 <action issue="IO-380" dev="sebb" type="fix" due-to="claudio_ch"> 1403 FileUtils.copyInputStreamToFile should document it closes the input source 1404 </action> 1405 <action issue="IO-279" dev="sebb" type="fix"> 1406 Tailer erroneously considers file as new. 1407 Fix to use file.lastModified() rather than System.currentTimeMillis() 1408 </action> 1409 <action issue="IO-356" dev="sebb" type="fix"> 1410 CharSequenceInputStream#reset() behaves incorrectly in case when buffer size is not dividable by data size. 1411 Fix code so skip relates to the encoded bytes; reset now re-encodes the data up to the point of the mark 1412 </action> 1413 <action issue="IO-379" dev="sebb" type="add"> 1414 CharSequenceInputStream - add tests for available() 1415 Fix code so it really does reflect a minimum available. 1416 </action> 1417 <action issue="IO-328" dev="sebb" type="update"> 1418 getPrefixLength returns null if filename has leading slashes 1419 Javadoc: add examples to show correct behavior; add unit tests 1420 </action> 1421 <action issue="IO-299" dev="sebb" type="update"> 1422 FileUtils.listFilesAndDirs includes original dir in results even when it doesn't match filter 1423 Javadoc: clarify that original dir is included in the results 1424 </action> 1425 <action issue="IO-346" dev="sebb" type="add"> 1426 Add ByteArrayOutputStream.toInputStream() 1427 </action> 1428 <action issue="IO-368" dev="sebb" type="fix"> 1429 ClassLoaderObjectInputStream does not handle primitive typed members 1430 </action> 1431 <action issue="IO-341" dev="sebb" type="add"> 1432 A constant for holding the BOM character (U+FEFF) 1433 </action> 1434 <action issue="IO-314" dev="sebb" type="fix"> 1435 Deprecate all methods that use the default encoding 1436 </action> 1437 <action issue="IO-338" dev="sebb" type="fix"> 1438 When a file is rotated, finish reading previous file prior to starting new one 1439 </action> 1440 <action issue="IO-354" dev="sebb" type="fix"> 1441 Commons IO Tailer does not respect UTF-8 Charset. 1442 </action> 1443 <action issue="IO-323" dev="sebb" type="fix"> 1444 What should happen in FileUtils.sizeOf[Directory] when an overflow takes place? 1445 Added Javadoc. 1446 </action> 1447 <action issue="IO-372" dev="sebb" type="fix"> 1448 FileUtils.moveDirectory can produce misleading error message on failure 1449 </action> 1450 <action issue="IO-375" dev="sebb" type="update"> 1451 FilenameUtils.splitOnTokens(String text) check for '**' could be simplified 1452 </action> 1453 <action issue="IO-374" dev="sebb" type="update"> 1454 WildcardFileFilter ctors should not use null to mean IOCase.SENSITIVE when delegating to other ctors 1455 </action> 1456 <action issue="IO-362" dev="ggregory" type="fix" due-to="mmadson, ggregory"> 1457 IOUtils.contentEquals* methods returns false if input1 == input2, should return true. 1458 </action> 1459 <action issue="IO-361" dev="ggregory" type="add"> 1460 Add API FileUtils.forceMkdirsParent(). 1461 </action> 1462 <action issue="IO-360" dev="ggregory" type="add"> 1463 Add API Charsets.requiredCharsets(). 1464 </action> 1465 <action issue="IO-359" dev="ggregory" type="add" due-to="yukoba"> 1466 Add IOUtils.skip and skipFully(ReadableByteChannel, long). 1467 </action> 1468 <action issue="IO-358" dev="ggregory" type="add" due-to="yukoba"> 1469 Add IOUtils.read and readFully(ReadableByteChannel, ByteBuffer buffer). 1470 </action> 1471 <action issue="IO-357" dev="ggregory" type="fix" due-to="mortenh"> 1472 [Tailer] InterruptedException while the thread is sleeping is silently ignored 1473 </action> 1474 <action issue="IO-353" dev="ggregory" type="add" due-to="ggregory"> 1475 Add API IOUtils.copy(InputStream, OutputStream, int) 1476 </action> 1477 <action issue="IO-349" dev="ggregory" type="add" due-to="scop"> 1478 Add API with array offset and length argument to FileUtils.writeByteArrayToFile. 1479 </action> 1480 <action issue="IO-352" dev="ggregory" type="fix" due-to="scop"> 1481 Spelling fixes. 1482 </action> 1483 <action issue="IO-348" dev="ggregory" type="add" due-to="plcstpierre"> 1484 Missing information in IllegalArgumentException thrown by org.apache.commons.io.FileUtils#validateListFilesParameters. 1485 </action> 1486 <action issue="IO-345" dev="ggregory" type="add" due-to="mkresse"> 1487 Supply a hook method allowing Tailer actively determining stop condition. 1488 </action> 1489 <action issue="IO-436" dev="ggregory" type="fix" due-to="christoph.schneegans"> 1490 Improper Javadoc comment for FilenameUtils.indexOfExtension. 1491 </action> 1492 <action issue="IO-437" dev="ggregory" type="add"> 1493 Make IOUtils.EOF public and reuse it in various classes. 1494 </action> 1495 </release> 1496 1497 <release version="2.4" date="2012-06-12" description="New features and bug fixes."> 1498 <action issue="IO-343" dev="ggregory" type="fix" due-to="igorlash"> 1499 org.apache.commons.io.comparator Javadoc is inconsistent with real code. 1500 </action> 1501 <action issue="IO-336" dev="ggregory" type="fix" due-to="rleavelle"> 1502 Yottabyte (YB) incorrectly defined in FileUtils. 1503 </action> 1504 <action issue="IO-269" dev="ggregory" type="add" due-to="sebb"> 1505 Tailer locks file from deletion/rename on Windows. 1506 </action> 1507 <action issue="IO-279" dev="sebb" type="fix" due-to="Sergio Bossa, Chris Baron"> 1508 Tailer erroneously considers file as new. 1509 </action> 1510 <action issue="IO-335" dev="sebb" type="fix"> 1511 Tailer#readLines - incorrect CR handling. 1512 </action> 1513 <action issue="IO-334" dev="sebb" type="fix"> 1514 FileUtils.toURLs throws NPE for null parameter; document the behavior. 1515 </action> 1516 <action issue="IO-333" dev="ggregory" type="add" due-to="fmeschbe"> 1517 Export OSGi packages at version 1.x in addition to 2.x. 1518 </action> 1519 <action issue="IO-320" dev="ggregory" type="add" due-to="ggregory"> 1520 Add XmlStreamReader support for UTF-32. 1521 </action> 1522 <action issue="IO-331" dev="ggregory" type="add" due-to="ggregory"> 1523 BOMInputStream wrongly detects UTF-32LE_BOM files as UTF-16LE_BOM files in method getBOM(). 1524 </action> 1525 <action issue="IO-332" dev="ggregory" type="fix" due-to="liangly"> 1526 Improve tailer's reading performance. 1527 </action> 1528 <action issue="IO-279" dev="ggregory" type="fix"> 1529 Improve Tailer performance with buffered reads (see IO-332). 1530 </action> 1531 <action issue="IO-329" dev="ggregory" type="fix" due-to="tivv"> 1532 FileUtils.writeLines uses unbuffered IO. 1533 </action> 1534 <action issue="IO-327" dev="ggregory" type="add" due-to="ggregory"> 1535 Add byteCountToDisplaySize(BigInteger). 1536 </action> 1537 <action issue="IO-326" dev="ggregory" type="add" due-to="ggregory, kinow"> 1538 Add new FileUtils.sizeOf[Directory] APIs to return BigInteger. 1539 </action> 1540 <action issue="IO-325" dev="ggregory" type="add" due-to="raviprak"> 1541 Add IOUtils.toByteArray methods to work with URL and URI. 1542 </action> 1543 <action issue="IO-324" dev="ggregory" type="add" due-to="raviprak"> 1544 Add missing Charset sister APIs to method that take a String charset name. 1545 </action> 1546 <action issue="IO-319" dev="ggregory" type="fix" due-to="raviprak"> 1547 FileUtils.sizeOfDirectory follows symbolic links. 1548 </action> 1549 </release> 1550 1551 <release version="2.3" date="2012-April-10" description="New features and bug fixes."> 1552 <action issue="IO-322" dev="ggregory" type="add" due-to="ggregory"> 1553 Add and use class Charsets. 1554 </action> 1555 <action issue="IO-321" dev="ggregory" type="add" due-to="ggregory"> 1556 ByteOrderMark UTF_32LE is incorrect. 1557 </action> 1558 <action issue="IO-318" dev="ggregory" type="add" due-to="ggregory"> 1559 Add Charset sister APIs to method that take a String charset name. 1560 </action> 1561 </release> 1562 1563 <release version="2.2" date="2012-March-26" description="New features and bug fixes."> 1564 <action issue="IO-313" dev="ggregory" type="add" due-to="ggregory"> 1565 Add IOUtils.toBufferedReader(Reader) 1566 </action> 1567 <!-- Note: the issue was not raised by Manoj, but arose from IO-305 and tests he performed --> 1568 <action issue="IO-308" dev="sebb" type="add" due-to="Manoj Mokashi"> 1569 Allow applications to provide buffer (or size) for copyLarge methods. 1570 </action> 1571 <action issue="IO-311" dev="sebb" type="fix" due-to="Robert Muir"> 1572 IOUtils.read(InputStream/Reader) ignores the offset parameter 1573 </action> 1574 <action issue="IO-312" dev="sebb" type="fix"> 1575 CharSequenceInputStream(CharSequence s, Charset charset, int bufferSize) ignores bufferSize 1576 </action> 1577 <action issue="IO-305" dev="sebb" type="add" due-to="Manoj Mokashi"> 1578 New copyLarge() method in IOUtils that takes additional offset, length arguments 1579 </action> 1580 <action issue="IO-300" dev="sebb" type="fix"> 1581 FileUtils.moveDirectoryToDirectory removes source directory if destination is a sub-directory 1582 </action> 1583 <action issue="IO-307" dev="sebb" type="fix"> 1584 ReaderInputStream#read(byte[] b, int off, int len) should check for valid parameters 1585 </action> 1586 <action issue="IO-287" dev="bayard" type="add" due-to="Ron Kuris, Gary Gregory"> 1587 Use terabyte (TB), petabyte (PB) and exabyte (EB) in FileUtils.byteCountToDisplaySize(long size) 1588 </action> 1589 <action issue="IO-306" dev="sebb" type="fix"> 1590 ReaderInputStream#read(byte[] b, int off, int len) should always return 0 for length == 0 1591 </action> 1592 <action issue="IO-173" dev="sebb" type="add" due-to="Marcos Vinícius da Silva"> 1593 FileUtils.listFiles() doesn't return directories 1594 </action> 1595 <action issue="IO-276" dev="sebb" type="fix" due-to="nkami"> 1596 "FileUtils#deleteDirectoryOnExit(File)" does not work 1597 </action> 1598 <action issue="IO-273" dev="sebb" type="fix" due-to="sebb"> 1599 BoundedInputStream.read() treats max differently from BoundedInputStream.read(byte[]...) 1600 </action> 1601 <action issue="IO-297" dev="sebb" type="add" due-to="Oleg Kalnichevski"> 1602 CharSequenceInputStream to efficiently stream content of a CharSequence 1603 </action> 1604 <action issue="IO-296" dev="sebb" type="update" due-to="Oleg Kalnichevski"> 1605 ReaderInputStream optimization: more efficient reading of small chunks of data 1606 </action> 1607 <action issue="IO-298" dev="sebb" type="fix" due-to="Christian Schulte"> 1608 Various methods of class 'org.apache.commons.io.FileUtils' incorrectly suppress 'java.io.IOException' 1609 </action> 1610 <action issue="IO-304" dev="ggregory" type="add" due-to="liangly"> 1611 The second constructor of Tailer class does not pass 'delay' to the third one 1612 </action> 1613 <action issue="IO-303" dev="ggregory" type="add" due-to="fabian.barney"> 1614 TeeOutputStream does not call branch.close() when main.close() throws an exception 1615 </action> 1616 <action issue="IO-302" dev="ggregory" type="add" due-to="jsteuerwald, detinho"> 1617 ArrayIndexOutOfBoundsException in BOMInputStream when reading a file without BOM multiple times 1618 </action> 1619 <action issue="IO-301" dev="ggregory" type="add" due-to="kaykay.unique"> 1620 Add IOUtils.closeQuietly(Selector) necessary 1621 </action> 1622 <action issue="IO-292" dev="sebb" type="add" due-to="sebb"> 1623 IOUtils.closeQuietly() should take a ServerSocket as a parameter 1624 </action> 1625 <action issue="IO-290" dev="sebb" type="add" due-to="sebb"> 1626 Add read/readFully methods to IOUtils 1627 </action> 1628 <action issue="IO-288" dev="sebb" type="add" due-to="Georg Henzler"> 1629 Supply a ReversedLinesFileReader 1630 </action> 1631 <action issue="IO-291" dev="ggregory" type="add" due-to="ggregory"> 1632 Add new function FileUtils.directoryContains. 1633 </action> 1634 <action issue="IO-275" dev="sebb" type="add" due-to="CJ Aspromgos"> 1635 FileUtils.contentEquals and IOUtils.contentEquals - Add option to ignore "line endings" 1636 Added contentEqualsIgnoreEOL methods to both classes 1637 </action> 1638 </release> 1639 1640 <release version="2.1" date="2011-Sep-28" description="New features and bug fixes."> 1641 <action dev="ggregory" type="add" issue="IO-285" due-to="ggregory"> 1642 Use standard Maven directory layout 1643 </action> 1644 <action dev="ggregory" type="add" issue="IO-284" due-to="ggregory"> 1645 Add IOUtils API toString for URL and URI to get contents 1646 </action> 1647 <action dev="ggregory" type="add" issue="IO-282" due-to="ggregory"> 1648 Add API FileUtils.copyFile(File input, OutputStream output) 1649 </action> 1650 <action dev="sebb" type="fix" issue="IO-280" due-to="sebb"> 1651 Dubious use of mkdirs() return code 1652 </action> 1653 <action type="fix" issue="IO-277"> 1654 ReaderInputStream enters infinite loop when it encounters an unmappable character 1655 </action> 1656 <action type="fix" issue="IO-264"> 1657 FileUtils.moveFile() Javadoc should specify FileExistsException thrown 1658 </action> 1659 <action type="add" issue="IO-262"> 1660 FileAlterationObserver has no getter for FileFilter 1661 </action> 1662 <action type="add" issue="IO-261"> 1663 Add FileUtils.getFile API with varargs parameter 1664 </action> 1665 <action type="fix" issue="IO-260"> 1666 ClassLoaderObjectInputStream does not handle Proxy classes 1667 </action> 1668 <action type="update" issue="IO-259"> 1669 FileAlterationMonitor.stop(boolean allowIntervalToFinish) 1670 </action> 1671 <action type="add" issue="IO-182"> 1672 Add new APPEND parameter for writing string into files 1673 </action> 1674 <action dev="sebb" type="fix" issue="IO-274" due-to="Frank Grimes"> 1675 Tailer returning partial lines when reaching EOF before EOL 1676 </action> 1677 <action dev="sebb" type="fix" issue="IO-266" due-to="Igor Smereka"> 1678 FileUtils.copyFile() throws IOException when copying large files to a shared directory (on Windows) 1679 </action> 1680 <action dev="sebb" type="fix" issue="IO-263" due-to="Gil Adam"> 1681 FileSystemUtils.freeSpaceKb throws exception for Windows volumes with no visible files. 1682 Improve coverage by also looking for hidden files. 1683 </action> 1684 <action dev="sebb" type="add" issue="IO-251" due-to="Marco Albini"> 1685 Add new read method "toByteArray" to handle InputStream with known size. 1686 </action> 1687 </release> 1688 1689 <release version="2.0.1" date="2010-Dec-26"> 1690 <action type="update"> 1691 TODO: Convert RELEASE-NOTES.txt from 2.0.1? 1692 </action> 1693 </release> 1694 1695 <release version="2.0" date="2010-Oct-18"> 1696 <action type="update"> 1697 TODO: Convert RELEASE-NOTES.txt from 2.0? 1698 </action> 1699 </release> 1700 1701 <release version="1.4" date="2008-Jan-21"> 1702 <action type="update"> 1703 TODO: Convert RELEASE-NOTES.txt from 1.4? 1704 </action> 1705 </release> 1706 1707 <release version="1.3.2" date="2007-Jul-02" description="Bug fixes."> 1708 <action dev="jochen" type="fix" issue="IO-115"> 1709 Some tests, which are implicitly assuming a Unix-like file 1710 system, are now skipped on Windows. 1711 </action> 1712 <action dev="jochen" type="fix" issue="IO-116"> 1713 Created the FileCleaningTracker, basically a non-static 1714 version of the FileCleaner, which can be controlled by 1715 the user. 1716 </action> 1717 <action dev="bayard" type="fix" issue="IO-117" due-to="Hiroshi Ikeda"> 1718 EndianUtils - both readSwappedUnsignedInteger(...) methods could 1719 return negative numbers due to int/long casting. 1720 </action> 1721 </release> 1722 </body> 1723</document> 1724