            Apache Commons VFS Project 2.9.0
            RELEASE NOTES
            2021-07-16

The Apache Commons VFS Project team is pleased to announce the release of Apache Commons VFS Project 2.9.0.

Apache Commons VFS is a Virtual File System library.

Maintenance release. Requires Java 8.

Changes in this version include:

Fixed Bugs:
o           Add and use FileOperationProvider.EMPTY_ARRAY. Thanks to Gary Gregory.
o           VFS.close(): Set `instance` to `null` after closing it; #163. Thanks to Boris Petrov.
o           Fix closing the files cache after warning that not all components have been closed; #165. Thanks to Boris Petrov.
o           Fix NPE when closing a stream from a different thread #167. See also #166. Thanks to Boris Petrov, Gary Gregory, Max Kellermann.
o VFS-798:  IllegalArgumentException: Bad escape for Chinese characters in FileObject path #168. Thanks to XenoAmess, Gary Gregory.
o           Minor changes #185. Thanks to Arturo Bernal.
o           Port internal embedded HTTP asynchronous file server used in tests from from Apache HttpComponents HttpCore/HttpClient 4.x to 5.0.x. Thanks to Gary Gregory.
o           Replace construction of FileInputStream and FileOutputStream objects with Files NIO APIs. #164. Thanks to Arturo Bernal.
o           Only use reflection VFS.createFileSystemManager(String) if the FileSystemManager is not a subclass of AbstractFileSystem. Thanks to Gary Gregory.
o           Simplify if conditions #170. Thanks to Arturo Bernal.
o           Redundant local variable #171. Thanks to Arturo Bernal.
o VFS-804:  Fix and Refine Javadoc #174. Thanks to Arturo Bernal.
o VFS-784:  SSL Connection failing with http4 provider with squid proxy nginx combination. Thanks to satish-csi, Michael Osipov, Gary Gregory.
o           Remove checked exception from method signatures that do not throw them. This maintains binary compatibility but not source compatibility.
            - org.apache.commons.vfs2.impl.DefaultFileSystemConfigBuilder.setUserAuthenticator(FileSystemOptions, UserAuthenticator)
            - org.apache.commons.vfs2.impl.DefaultFileSystemManager.setBaseFile(File)
            - org.apache.commons.vfs2.provider.LayeredFileNameParser.extractRootName(StringBuilder)
            - org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.setCompression(FileSystemOptions, String)
            - org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.setConfigRepository(FileSystemOptions, ConfigRepository)
            - org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.setIdentities(FileSystemOptions, File...)
            - org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.setIdentityInfo(FileSystemOptions, IdentityInfo...)
            - org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.setIdentityProvider(FileSystemOptions, IdentityProvider...)
            - org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.setIdentityRepositoryFactory(FileSystemOptions, IdentityRepositoryFactory)
            - org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.setKnownHosts(FileSystemOptions, File)
            - org.apache.commons.vfs2.provider.local.LocalFile.LocalFile(LocalFileSystem, String, AbstractFileName)
            - org.apache.commons.vfs2.provider.local.LocalFile.doGetType()
            - org.apache.commons.vfs2.provider.tar.TarFileObject.TarFileObject(AbstractFileName, TarArchiveEntry, TarFileSystem, boolean)
            - org.apache.commons.vfs2.provider.tar.TarFileSystem.createTarFileObject(AbstractFileName, TarArchiveEntry)
            - org.apache.commons.vfs2.provider.zip.ZipFileObject.ZipFileObject(AbstractFileName, ZipEntry, ZipFileSystem, boolean)
            - org.apache.commons.vfs2.provider.http4.Http4FileProvider.createHttpClientContext()
            - org.apache.commons.vfs2.provider.http5.Http5FileProvider.createHttpClientContext()
            - org.apache.commons.vfs2.provider.http4.Http4FileObject.getInternalURI()
            - org.apache.commons.vfs2.provider.http5.Http5FileObject.getInternalURI() Thanks to Gary Gregory.
o VFS-805:  HTTP seek always exhausts response #186. Thanks to Claus Stadler, Gary Gregory.
o VFS-805:  SftpFileObject: Add synchronized to methods that read or write the thread-unsafe instance variable of type com.jcraft.jsch.SftpATTRS. Thanks to Max Kellermann, Mark Thomas, Bernd, Gary Gregory.
o VFS-759:  WebDAV providers should loaded only when commons-vfs2-jackrabbit* jars are available #84 Thanks to Woonsan Ko.
o           Simplify conditions and avoid extra checks #187. Thanks to Arturo Bernal.
o VFS-803:  Simplify if as some conditions are covered by others #173. Thanks to Arturo Bernal.

Changes:
o           Bump Log4j 2.14.0 -> 2.14.1. Thanks to Gary Gregory.
o           Bump Maven Surefire from 2.19.1 to 3.0.0-M5. Thanks to Gary Gregory.
o           Bump net.sourceforge.pmd:pmd-* from 6.32.0 to 6.33.0.
o           Bump checkstyle from 8.41 to 8.44 #175. Thanks to Dependabot, Gary Gregory.
o           Bump actions/setup-java to v2 #177. Thanks to Boris Petrov.
o           Bump mockito-core from 3.8.0 to 3.11.2 #178. Thanks to Dependabot, Gary Gregory.
o           Bump commons-io from 2.8.0 to 2.10.0. Thanks to Gary Gregory.
o           Bump actions/cache from 2.1.4 to 2.1.6 #183. Thanks to Dependabot.
o           Bump jackrabbit2.version from 2.21.5 to 2.21.6 #180. Thanks to Dependabot.
o           Bump commons.jacoco.version from 0.8.6 to 0.8.7. Thanks to Gary Gregory.
o           Bump hadoop.version 3.3.0 to 3.3.1. Thanks to Gary Gregory.
o           Bump commons.pmd.version from 6.33.0 to 6.36.0 #191. Thanks to Dependabot.
o           Bump asm from 9.1 to 9.2 #194. Thanks to Dependabot.
o           Bump commons-compress from 1.20 to 1.21 #195. Thanks to Dependabot.
o           Bump httpclient5 from 5.0.3 to 5.1 #196. Thanks to Dependabot.
o           Bump commons.spotbugs.version from 4.2.2 to 4.3.0. Thanks to Gary Gregory.
o           Bump commons-io from 2.10.0 to 2.11.0 #197. Thanks to Gary Gregory.
o           Bump commons.spotbugs.impl.version from 4.2.2 to 4.3.0.
            Workaround https://github.com/spotbugs/spotbugs/issues/1539 Thanks to Gary Gregory.
o           Bump commons.felix.version from 5.1.1 to 5.1.2. Thanks to Gary Gregory.
o           Bump biz.aQute.bndlib.version from 5.1.2 to 5.3.0. Thanks to Gary Gregory.
o           Bump commons.javadoc.version from 3.2.0 to 3.3.0. Thanks to Gary Gregory.
o           Update from to javax.mail:mail 1.4.7 to com.sun.mail:jakarta.mail 1.6.7. Thanks to Gary Gregory.


Historical list of changes: https://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS Project, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS Project website:

https://commons.apache.org/proper/commons-vfs/

Download page: https://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------

            Apache Commons VFS Project 2.8.0
            RELEASE NOTES
            2021-03-06

The Apache Commons VFS Project team is pleased to announce the release of Apache Commons VFS Project 2.8.0.

Apache Commons VFS is a Virtual File System library.

Feature and maintenance release. Requires Java 8.

Changes in this version include:

New features:
o           Add ability to remove a provider from DefaultFileSystemManager #149. Thanks to Boris Petrov, Gary Gregory.
o           Add and use VFS.close(). Thanks to Gary Gregory.
o           [FTP] Add support for ControlKeepAliveReplyTimeout and ControlKeepAliveTimeout. Thanks to Gary Gregory, xiaqingyun.
o           [FTP] Tests can be configured with a custom FTP server command factory. Thanks to Gary Gregory, Michael Graham.
o VFS-257:  [FTP] Add support for MDTM to get more accurate last modified times. Thanks to Andrew Franklin, Michael Graham, Gary Gregory.
o           [FTP] Add FtpFileSystemConfigBuilder.setConnectTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [FTP] Add FtpFileSystemConfigBuilder.setDataTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [FTP] Add FtpFileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [FTP] Add FtpFileSystemConfigBuilder.getConnectTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [FTP] Add FtpFileSystemConfigBuilder.getDataTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [FTP] Add FtpFileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [FTP] Add FtpFileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP] Add HttpFileSystemConfigBuilder.setConnectionTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP] Add HttpFileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP] Add HttpFileSystemConfigBuilder.getConnectionTimeout(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP] Add HttpFileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [SFTP] Add SftpFileSystemConfigBuilder.setConnectTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [SFTP] Add SftpFileSystemConfigBuilder.setSessionTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [SFTP] Add SftpFileSystemConfigBuilder.getConnectTimeout(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [SFTP] Add SftpFileSystemConfigBuilder.getSessionTimeout(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP4] Add Http4FileSystemConfigBuilder.setConnectionTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP4] Add Http4FileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP4] Add Http4FileSystemConfigBuilder.getConnectionTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP4] Add Http4FileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP5] Add Http5FileSystemConfigBuilder.setConnectionTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP5] Add Http5FileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP5] Add Http5FileSystemConfigBuilder.getConnectionTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP5] Add Http5FileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           Add AbstractFileSystem.AbstractFileSystem() for Serializable subclasses (PMD). Thanks to PMD, Gary Gregory.

Fixed Bugs:
o VFS-783:  Based on WEBDAV4 vs. WEBDAV4S set back-end http scheme #118. Thanks to satish-csi, Michael Osipov, Woonsan Ko, Gary Gregory.
o VFS-783:  Proper http scheme setting on webdav/webdav2 with unit tests #143. Thanks to satish-csi, Woonsan Ko, Gary Gregory.
o VFS-783:  [SFTP] SftpFileSystem.executeCommand() should use UTF-8 instead of the platform default. Thanks to Gary Gregory.
o           FileContentThreadData: lazy ArrayList initialization to save memory #155. Thanks to Max Kellermann.
o           Fix possible ClassCastException in DefaultFileSystemManager.freeUnusedResources(). Thanks to Gary Gregory.
o VFS-748:  TarProvider Incorrectly marks file IMAGINARY after garbage collection with WeakRefFilesCache, #97. Thanks to PeterAlfredLee, Gary Gregory.
o VFS-794:  Fix file resource leak in CombinedResources (properties file) which keeps the Commons VFS jar file open. Thanks to Gary Gregory.
o           Rework SoftRefFilesCache locking part 1 #158. Thanks to Max Kellermann, Bruno P. Kinoshita, Gary Gregory.
o VFS-785:  [HTTP4][HTTP5] Credentials conflict when root and proxy hosts are same name but different ports, #120. Thanks to satish bhor, Michael Osipov, Gary Gregory.
o           Rework SoftRefFilesCache locking #154. Thanks to Max Kellermann, Gary Gregory, Florent Guillaume, Bruno P. Kinoshita, Bernd.
o VFS-782:  Pass correct proxy authentication credentials #117. Thanks to satish-csi, Gary Gregory.

Changes:
o           Modify some code use for-each loop and stream API #142. Thanks to PeterAlfredLee.
o           Simplify some String tests in method Os#determineOsFamily #147. Thanks to PeterAlfredLee.
o           Update org.mockito:mockito-core 3.5.13 -> 3.8.0. Thanks to Gary Gregory.
o           Update org.apache.jackrabbit:jackrabbit-* 2.21.3 -> 2.21.5. Thanks to Gary Gregory.
o           Bump actions/checkout from v2.3.3 to v2.3.4 #144. Thanks to Dependabot.
o           Update tests from Log4j 2.13.3 to 2.14.0. Thanks to Gary Gregory.
o           Update com.puppycrawl.tools:checkstyle 8.36.2 -> 8.41. Thanks to Gary Gregory.
o           Update maven-checkstyle-plugin 3.1.1 -> 3.1.2. Thanks to Gary Gregory.
o           Update org.apache.httpcomponents:httpcore-nio 4.4.13 -> 4.4.14. Thanks to Gary Gregory.
o           Modify some calls of method Collection.toArray #145. Thanks to PeterAlfredLee, Gary Gregory.
o           Update commons.japicmp.version 0.14.3 -> 0.15.3. Thanks to Gary Gregory.
o           Minor Improvements, #152, #156, #160. Thanks to Arturo Bernal.
o           Update commons.spotbugs.version 4.1.4 -> 4.2.0. Thanks to Gary Gregory.
o           Update commons.spotbugs.impl.version 4.1.3 -> 4.2.0. Thanks to Gary Gregory.
o           Bump actions/cache from v2 to v2.1.4 #159. Thanks to Dependabot.
o           Update commons-net:commons-net 3.7.2-> 3.8.0. Thanks to Gary Gregory.
o           Update junit 4.13.1 -> 4.13.2. Thanks to Gary Gregory.
o           Update maven-pmd-plugin 3.13.0 -> 3.14.0. Thanks to Gary Gregory.
o VFS-795:  Code improvements for SoftRefFilesCache (simplify loop, use isEmpty, ...). Thanks to Max Kellermann.
o           Update commons-lang3 3.11 -> 3.12.0. Thanks to Gary Gregory.


Historical list of changes: https://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS Project, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS Project website:

https://commons.apache.org/proper/commons-vfs/

Download page: https://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------

            Apache Commons VFS Project 2.7.0
            RELEASE NOTES
            2020-10-19

The Apache Commons VFS Project team is pleased to announce the release of Apache Commons VFS Project 2.7.0.

Apache Commons VFS is a Virtual File System library.

Maintenance release. Requires Java 8.

Changes in this version include:

New features:
o VFS-757:  [SFTP] Configure whether exec detection is enabled #80. Thanks to ddg-igh.
o           Add proxy config for some HTTP/HTTPS test #108. Thanks to PeterAlfredLee.
o           Fix some test error when JVM's default language is not US en #107. Thanks to PeterAlfredLee.
o VFS-787:  Allow users to set proxy schemes like http/https #122. Thanks to satish bhor.
o VFS-786:  Allow users to set custom keystore types like JCEKS, PKCS12 #121. Thanks to satish bhor.
o VFS-570:  Add HDFS write support #114. Thanks to garpinc, Gary Gregory.
o           Add FileObject.getURI(). Thanks to Gary Gregory.
o           Add FileObject.getPath(). Thanks to Gary Gregory.
o VFS-768:  Update Apache httpclient 4.5.11 to 4.5.13 and httpclient5 5.0-beta7 to 5.0.3. Thanks to ddg-igh, Gary Gregory.
o           Add org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.isDisableDetectExecChannel(FileSystemOptions) and setDisableDetectExecChannel(FileSystemOptions, boolean). Thanks to Gary Gregory.
o           Add org.apache.commons.vfs2.FileSystemConfigBuilder.toBooleanObject(boolean). Thanks to Gary Gregory.
o           org.apache.commons.vfs2.provider.VfsComponent now implements java.io.Closeable. Thanks to Gary Gregory.
o           Modify some code use try-with-resources #138. Thanks to PeterAlfredLee.

Fixed Bugs:
o VFS-753:  NumberFormatException in SftpFileSystem::getUId. Thanks to John Webb, Gary Gregory.
o VFS-779:  Possible null pointer dereference in org.apache.commons.vfs2.impl.DefaultFileReplicator.close() due to return value of called method. Thanks to Gary Gregory.
o           Modify some loop using stream API #96. Thanks to PeterAlfredLee.
o VFS-780:  SftpFileSystem returns null channel and produce NPE - fix get… #110. Thanks to Wuchte.
o VFS-788:  [webdav/webdav4] Jackrabbit1 and jackrabbit2 modules getting same OSGi symbolic name. Thanks to satish bhor.
o VFS-624:  Fix for read() in constructors of LocalFileRandomAccessContent and RamFileRandomAccessContent #93. Thanks to PeterAlfredLee.
o VFS-769:  Fix .tgz and .tbz2 createFileSystem fails #94 Thanks to PeterAlfredLee.
o VFS-664:  Fix for file names with exclamation mark can not be read #95. Thanks to PeterAlfredLee.
o VFS-777:  NoSuchMethodError due to multiple versions of commons-codec:commons-codec:jar. Thanks to Bing-ok, Gary Gregory.
o           Remove workaround for JDK BUG: 6192331 which was fixed way back in Java 6: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6192331 Thanks to Gary Gregory.
o           FileObject.getURL() returns an illegal URL when a it should escape a space. Thanks to Gary Gregory.
o           Fix test fail caused by lack proxy configuration for machines behind a proxy #139. Thanks to PeterAlfredLee.

Changes:
o           Update some file from CRLF to LF #141. Thanks to PeterAlfredLee.
o VFS-755:  Update org.apache.httpcomponents:httpclient from 4.5.10 to 4.5.11. Thanks to Gary Gregory.
o VFS-756:  Update org.apache.jackrabbit:jackrabbit-standalone-components from 2.19.6 to 2.21.3. Thanks to Gary Gregory.
o VFS-754:  Update Apache Commons Compress from 1.19 to 1.20. Thanks to Gary Gregory.
o           Update tests from Apache Commons Lang 3.9 to 3.11. Thanks to Gary Gregory.
o           Update tests from Log4j 2.13.0 to 2.13.3. Thanks to Gary Gregory.
o           Update tests from org.mockito:mockito-core from 3.2.4 to 3.5.13, #131. Thanks to Gary Gregory, Dependabot.
o           Update Apache Commons IO from 2.6 to 2.8.0. Thanks to Gary Gregory.
o           Update site reports from org.apache.bcel:bcel 6.4.1 to 6.5.0. Thanks to Gary Gregory.
o           Update actions/checkout from v1 to v2.3.3 #100, #109, #130. Thanks to Dependabot.
o           Update actions/setup-java from v1.4.0 to v1.4.3 #111, #113, #133. Thanks to Dependabot.
o           Update commons-parent from 50 to 52. Thanks to Gary Gregory.
o           Update checkstyle from 8.27 to 8.36.2 #123, #132. Thanks to Dependabot.
o           Update maven-pmd-plugin from 3.12.0 to 3.13.0 #125. Thanks to Dependabot.
o           Update exec-maven-plugin from 1.6.0 to 3.0.0 #127. Thanks to Dependabot.
o           Update com.puppycrawl.tools:checkstyle 8.36 -> 8.36.1. Thanks to Gary Gregory.
o           Update Apache Commons Net from 3.6 to 3.7.2. Thanks to Gary Gregory.
o           Update JUnit from 4.13 to 4.13.1. Thanks to Gary Gregory.


Historical list of changes: https://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS Project, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS Project website:

https://commons.apache.org/proper/commons-vfs/

Download page: https://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------

            Apache Commons VFS Project 2.6.0
            RELEASE NOTES
            2020-01-06

The Apache Commons VFS Project team is pleased to announce the release of Apache Commons VFS Project 2.6.0.

Apache Commons VFS is a Virtual File System library.

New features and bug fix release.

Changes in this version include:

Fixed Bugs:
o           Clean up tests and simplify assertions #76. Thanks to Eitan Adler.
o VFS-750:  Fix backwards incompatibility in AbstractFileObject.getInputStream(). Thanks to Boris Petrov, Gary Gregory.
o VFS-751:  Deprecate org.apache.commons.vfs2.FileUtil for org.apache.commons.vfs2.util.FileObjectUtils. Thanks to Gary Gregory.

Changes:
o           Update JUnit from 4.12 to 4.13. Thanks to Gary Gregory.


Historical list of changes: https://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS Project, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS Project website:

https://commons.apache.org/proper/commons-vfs/

Download page: https://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------

            Apache Commons VFS 2.5.0
            RELEASE NOTES
            2019-12-24

The Apache Commons VFS team is pleased to announce the release of Apache Commons VFS 2.5.0.

Apache Commons VFS is a Virtual File System library.

New features and bug fix release.

Changes in this version include:

New features:
o VFS-734:  Add functional interface org.apache.commons.vfs2.function.VfsConsumer. Thanks to Gary Gregory.
o VFS-735:  Add org.apache.commons.vfs2.FileSystemManager.close() via AutoCloseable. Thanks to Gary Gregory.
o VFS-736:  Add org.apache.commons.vfs2.VFS.reset(). Thanks to Gary Gregory.
o VFS-742:  Add org.apache.commons.vfs2.FileContent.isEmpty(). Thanks to Gary Gregory.
o VFS-743:  Add org.apache.commons.vfs2.provider.compressed.CompressedFileFileObject.SIZE_UNDEFINED. Thanks to Gary Gregory.
o VFS-687:  Add http5 and http5s providers (#74) Thanks to Woonsan Ko, Gary Gregory.
o VFS-686:  Add webdav4 provider based on the latest Jackrabbit 2.x #52. Thanks to Woonsan Ko, Gary Gregory.
o VFS-738:  Deprecate org.apache.commons.vfs2.FileChangeEvent.getFile() in favor of getFileObject(). Thanks to Gary Gregory.

Fixed Bugs:
o VFS-741:  FileObject#getChildren allows listing of files with known scheme prefix (generalizes VFS-398).
o VFS-726:  getInputStream(int bufferSize) on SftpFileObject effectively ignores buffer size. Thanks to Cornelius Höfig, Gary Gregory.
o VFS-704:  Some providers wrap their input/output streams twice in a BufferedInputStream. Thanks to Boris Petrov, Gary Gregory.
o VFS-727:  Prevented creation of singleton file system manager from providers. Thanks to Michiel Hendriks, Gary Gregory.
o VFS-733:  Parent layer of ZipFileSystem set to null through OnCallRefreshFileObject and DecoratedFileObject.refresh(). Thanks to Falco, Gary Gregory, Bruno P. Kinoshita.
o VFS-739:  Changes to parseUri breaks backward compatibility by throwing NullPointerException in some cases. Thanks to xia0c, Gary Gregory.
o VFS-744:  org.apache.commons.vfs2.FileContent.getByteArray() can throw NegativeArraySizeException for BZip2 files. Thanks to Gary Gregory.
o VFS-590:  SFTP moveTo operation might fail on permission checks even if the operation itself might succeed. #75. Thanks to L, Alex Pearce, Gary Gregory.
o VFS-617:  SFTP isReadable fails if unable to determine group identity. #75. Thanks to Tim Nickels, Joshua Woods, David Johansson, Bernd Eckenfels, Len, Nim Lhûg, Vineet Tyagi, Gopal Warawate, Alex Pearce, Gary Gregory.
o VFS-444:  ResourceFileProvider "res://" failed to obtain FileObject from resolved FileName. Thanks to Walter Eaves, Xavier Dury, Michiel Hendriks, Gary Gregory.

Changes:
o VFS-737:  Update Hadoop from 3.2.0 to 3.2.1. Thanks to Gary Gregory.
o VFS-728:  Update Apache Commons Compress from 1.18 to 1.19. Thanks to Gary Gregory.
o VFS-729:  Upgrade Hadoop to 2.7.4 or later; will use current 3.2.0. Thanks to Michiel Hendriks, Gary Gregory.
o VFS-731:  Update org.apache.httpcomponents:httpclient from 4.5.9 to 4.5.10. Thanks to Gary Gregory.
o VFS-732:  Update org.apache.httpcomponents:httpcore-nio from 4.4.11 to 4.4.12. Thanks to Gary Gregory.
o           Update tests using org.mockito:mockito-core from 3.0.0 to 3.1.0. Thanks to Gary Gregory.
o VFS-749:  Update Apache Commons Parent from 48 to 50. Thanks to Gary Gregory.


Historical list of changes: https://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS website:

https://commons.apache.org/proper/commons-vfs/

Download it from https://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------

            Apache Commons VFS 2.4.1
            RELEASE NOTES
            2019-08-10    

The Apache Commons VFS team is pleased to announce the release of Apache Commons VFS 2.4.1

Apache Commons VFS is a Virtual File System library.

New features and bug fix release.

Changes in this version include:

Fixed Bugs:
o VFS-725:  [Local] org.apache.commons.vfs2.FileContent.getLastModifiedTime() is losing milliseconds (always ends in 000). Thanks to Gary Gregory.
o VFS-724:  FileContent#getByteArray() throws IllegalArgumentException: Buffer size <= 0 when file size is 0. Thanks to William R, Gary Gregory.
o           Javadoc fixes. Thanks to Gary Gregory.


Historical list of changes: https://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS website:

Visit https://commons.apache.org/proper/commons-vfs/

Download it from https://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------

            Apache Commons VFS 2.4
            RELEASE NOTES

The Apache Commons VFS team is pleased to announce the release of Apache Commons VFS 2.4.

Apache Commons VFS is a Virtual File System library.

New features and bug fix release.

Changes in this version include:

New features:
o VFS-690:  Allow to set key exchange algorithm explicitly. GitHub #32.
o VFS-497:  Ported filters from Commons IO #9. Thanks to Michael Schnell.
o VFS-696:  More efficient comparison in FileExtensionSelector #44. Thanks to Robert DeRose.
o VFS-660:  Expose workaround for connecting to FTP server from different subnets in PASV mode #35. Thanks to Liu Yubao.
o VFS-699:  Add setting for FTP encoding auto-detection #58. Thanks to Boris Petrov.
o VFS-706:  Add ability to specify buffer sizes #59. Thanks to Boris Petrov.
o VFS-609:  SFTP provider doesn't support a private key as byte array #60. Thanks to stevezhuang, Rostislav, Gary Gregory.
o VFS-707:  Update Apache HttpClient from 4.5.7 to 4.5.8. Thanks to Gary Gregory.
o VFS-712:  Add null-safe org.apache.commons.vfs2.util.FileObjectUtils.exists(FileObject). Thanks to Gary Gregory.
o VFS-713:  Add FileObjectUtils.readProperties(FileObject) method to read a .properties file. Thanks to Gary Gregory.
o VFS-715:  Add org.apache.commons.vfs2.FileContent.getByteArray(). Thanks to Gary Gregory.
o VFS-719:  Add methods to get the contents of file objects as strings. Thanks to Gary Gregory.
o VFS-720:  Implement Closeable for RandomAccessContent #66. Thanks to Boris Petrov.
o VFS-721:  Add support for symbolic links for the local file system and add FileObject#isSymbolicLink(). Thanks to Gary Gregory.

Fixed Bugs:
o VFS-694:  Fix inability to start the DefaultFileMonitor after it has been stopped. GitHub PR #55. Thanks to Boris Petrov.
o VFS-696:  SFTP HTTP and SOCKS proxy authentication. GitHub PR #49. Thanks to rayzzed.
o VFS-707:  [SFTP] SftpFileSystem.executeCommand(String, StringBuilder) can leak ChannelExec objects. Thanks to Gary Gregory.
o VFS-709:  [SFTP] SftpFileSystem.getGroupsIds() can initialize underlying data more than once while multithreading. Thanks to Gary Gregory.
o VFS-710:  [SFTP] SftpFileSystem.getUid() can initialize underlying data more than once while multithreading. Thanks to Gary Gregory.
o VFS-711:  [SFTP] SftpFileSystem can initialize underlying Session more than once while multithreading. Thanks to Gary Gregory.
o VFS-662:  [SFTP] SftpFileSystem has Thread-safe issue about idleChannel (#36). Thanks to qxo, Alexey Abashev, Gary Gregory.
o VFS-700:  Some tests fail on Java 11 and above. Thanks to Gary Gregory, Matthias Krueger.
o VFS-716:  Fix AbstractFileName.getURI returning unencoded #-sign #64. Thanks to Boris Petrov.
o VFS-698:  SFTP file attributes are fetched multiple times leading to very slow directory listing; #65. Thanks to David Septimus, Bernd.
o VFS-717:  Update org.apache.httpcomponents:httpclient from 4.5.8 to 4.5.9. Thanks to Gary Gregory.
o VFS-718:  MonitorInputStream should not close the stream in "read" #67. Thanks to Boris Petrov.

Changes:
o VFS-692:  Update Apache Commons Collections from 4.2 to 4.3. Thanks to Gary Gregory.
o VFS-693:  Add support for customizing FTP transfer aborted status codes. GitHub PR #51. Thanks to Boris Petrov, Gary Gregory.
o VFS-702:  Simplify adding files to DefaultFileMonitor #57. Thanks to Boris Petrov.
o VFS-703:  Update Apache Commons Lang from 3.8.1 to 3.9. Thanks to Gary Gregory.
o VFS-722:  Update Apache Commons Collections from 4.3 to 4.4. Thanks to Gary Gregory.
o           Source incompatibility: org.apache.commons.vfs2.FileFilter.accept(FileSelectInfo) now throws checked exception FileSystemException.
o           Public API note: The overridden methods getURI() and getFriendlyURI() in org.apache.commons.vfs2.provider.local.LocalFileName where removed but are implemented in a superclass.
o           Public API note: The overridden method org.apache.commons.vfs2.provider.sftp.SftpFileObject#refresh() was removed but is implemented in a superclass.
o           Public API note: The overridden method org.apache.commons.vfs2.provider.sftp.SftpFileProvider#init() was removed but is implemented in a superclass.


Historical list of changes: https://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS website:

Visit https://commons.apache.org/proper/commons-vfs/

Download it from https://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------

              Apache Commons VFS 2.3
                  RELEASE NOTES

The Apache Commons VFS team is pleased to announce the release of Apache Commons VFS 2.3.

Apache Commons VFS is a Virtual File System library.

New features and bug fix release.

Changes in this version include:

New features:
o VFS-677:  [SFTP] Add support for append mode. Thanks to dingxbcn.
o VFS-673:  [SFTP] Support com.jcraft.jsch.ConfigRepository (~/.ssh/config) with SftpFileSystemConfigBuilder and flag to load OpenSSHConfig. Thanks to Oleksandr Lykhonosov.
o VFS-673:  DefaultFileSystemManager should implement AutoCloseable. Thanks to Daniel Banks.
o VFS-637:  Zip files with legacy encoding and special characters let VFS crash. Thanks to Gary Gregory.
o VFS-360:  Add HTTP provider based on HttpComponents HttpClient 4. Thanks to Woonsan Ko.
o VFS-689:  org.apache.commons.vfs2.provider.http.HttpFileObject.getHeadMethod() does not release connection when an exception is thrown. Thanks to Gary Gregory.

Fixed Bugs:
o VFS-645:  VfsClassLoaderTests and JarProviderTestCase fails on Java 9 and up.
o VFS-678:  Fix various LGTM.com code review warnings.
o VFS-652:  PatternFileSelector documentation to describe actual matching against getPath().
o VFS-589:  SFTP moveTo operation hangs if the server does not support SSH channelExec. Thanks to L, Gary Gregory.
o VFS-655:  OSGI MANIFEST.MF "Import-Package" should be ";resolution:=optional" for Maven "optional" dependencies. Thanks to Arnaud MERGEY.
o VFS-657:  FileSelector implementations like FileDepthSelector should throw Exception. Thanks to Elias Putz.
o VFS-614:  MonitorInputStream should not close the stream in read(). Thanks to Boris Petrov, Otto Fowler.
o VFS-667:  org.apache.commons.vfs2.provider.res.ResourceFileProvider.findFile(FileObject, String, FileSystemOptions) should throw a org.apache.commons.vfs2.FileSystemException instead of a NPE when the class loader is null.
o VFS-669:  org.apache.commons.vfs2.util.CombinedResources.loadResources(String) should not throw an NPE for the system class loader is null.
o VFS-675:  NullPointerException at AbstractFileObject.java:221.
o VFS-674:  Cannot close an FTP input stream without an exception. Thanks to Boris Petrov, Gary Gregory.
o VFS-294:  NullPointerException in FtpFileObject.getChildFile(). Thanks to Johannes Scharf.
o VFS-679:  NullPointerException in FtpFileObject.doGetLastModifiedTime(). Thanks to Boris Petrov, Gary Gregory.
o VFS-398:  FtpFileObject.getChildren() fails when a folder contains a file with a colon in the name. Thanks to Otto Fowler.

Changes:
o VFS-650:  Update Apache Commons Compress from 1.15 to 1.16.1.
o VFS-646:  Update Apache Commons Compress from 1.14 to 1.15.
o VFS-653:  Replace use of deprecated APIs in HDFS provider.
o VFS-666:  Update Apache Commons Collections from 4.1 to 4.2.
o VFS-668:  Throw a NPE with a better message when a class loader is null.
o VFS-671:  Update Apache Commons Compress from 1.16.1 to 1.18.
o VFS-680:  Update from Java 7 to Java 8.
o VFS-681:  VFS.setManager should be synchronized; #43. Thanks to Robert DeRose.
o VFS-682:  Throw a org.apache.commons.vfs2.FileSystemException instead of a NullPointerException in org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveName(FileName, String, NameScope).
o VFS-688:  [SFTP] Update jsch from 0.1.54 to 0.1.55.


Historical list of changes: https://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS website:

Visit https://commons.apache.org/proper/commons-vfs/

Download it from https://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------

              Apache Commons VFS 2.2
                  RELEASE NOTES

The Apache Commons VFS team is pleased to announce the release of Apache Commons VFS 2.2.

Apache Commons VFS is a Virtual File System library.

New features and bug fix release.

Changes in this version include:

New features:
o VFS-628:  Add a file inverter FileSelector: InvertIncludeFileSelector.

Fixed Bugs:
o VFS-189:  Possible NPE in DefaultFileSystemManager.
o VFS-620:  FileObject.moveTo(FileObject) API doesn't work well for a Linux FTP. Thanks to stevezhuang.
o VFS-291:  ZIP archives are not properly closed after unzipping and cannot be deleted until the JVM exists.
o VFS-644:  AbstractFileSystem.streamClosed() always sets openStream count to zero.

Changes:
o VFS-642:  Upgrade to jcifs 1.3.17 Thanks to ilangoldfeld.
o VFS-612:  Update the platform requirement from Java 6 to Java 7.
o VFS-615:  Update Apache Commons Compress from 1.11 to 1.12.
o VFS-629:  Update Apache Commons Compress from 1.12 to 1.13.
o VFS-639:  Update Apache Commons Compress from 1.13 to 1.14.
o VFS-631:  Update from Apache Commons Net 3.5 to 3.6.
o VFS-632:  Update from JCraft jsch for SFTP/SSH from 0.1.53 to 0.1.54.
o VFS-621:  Add API VFS.setManager(FileSystemManager).
o VFS-643:  VFS should not log at the INFO level.

Known Problems:
o VFS-645:  VfsClassLoaderTests fails on Java 9.


Historical list of changes: https://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS website:

Visit https://commons.apache.org/proper/commons-vfs/

Download it from https://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------

              Apache Commons VFS 2.1
                  RELEASE NOTES

The Apache Commons VFS team is pleased to announce the release of Apache Commons VFS 2.1.

Apache Commons VFS is a Virtual File System library.

New features and bug fix release.

Please note that the Clirr report shows several errors.
These may affect source compatibility.
However they should not affect binary compatibility, as explained below.

FileContent, FileName, FileObject, FileSystemManager, RandomAccessContent:
The above interfaces have been updated to add new methods.
This does not affect binary compatibility; for details please see:
https://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html#jls-13.5.3-100
The above changes may affect source compatibility.
 Changes to method parameters and return types in TarFileObject and TarFileSystem
The original parameter/return types were the following:
org.apache.commons.vfs2.provider.tar.TarEntry
org.apache.commons.vfs2.provider.tar.TarInputStream
The above were package protected, so any methods using them did not form part of the public API.
Therefore source and binary compatibility is not affected.

Changes in this version include:

New features:
o VFS-198:  [http] Make user agent configurable. Thanks to Andrew Franklin, Simon Legner.
o VFS-555:  [hdfs] Add the ability to specify an HDFS configuration file with HdfsFileSystemConfigBuilder.
o           [example] make VFS Shell print version and implement new 'info' command.
o VFS-532:  [FTP] Allow configuring remoteVerificationEnabled on FTPClient instances. Thanks to Gareth Daniel Smith.
o VFS-468:  [FTPS] Add option for KeyManager (and TrustManager) to support FTPS servers that ask for the client certificate for authentication.
o VFS-412:  [FTPS] Add support for command to set the DataChannelProtectionLevel. Thanks to Jose Juan Montiel.
o VFS-442:  [HDFS] Add an HDFS FileSystem Provider. Thanks to Dave Marion.
o VFS-447:  [FTP/FTPS] Update Apache Commons Net to 3.2 from 3.1.
o VFS-445:  Add FileSystemManager.resolveFile(URI) and resolveFile(URL).
o VFS-440:  [SFTP] Stream (e.g. netcat) proxy for Sftp file system (aka ProxyCommand). Thanks to bpiwowar.
o VFS-432:  [HTTP][WebDAV] Allow HTTP follow redirect.
o VFS-431:  FileSystemOption does not implement toString().
o VFS-405:  Get/set the file permissions. Thanks to dwaszak.
o VFS-426:  HTTP URL query string not part of cache key. Thanks to daniel.bergholm.
o VFS-425:  Add API FileObject.isExecutable().
o VFS-421:  [SFTP] Configure a custom Identity Repository. Thanks to bpiwowar.
o VFS-417:  [RAM][Local] Add and implement new API: RandomAccessContent.setLength(long).
o VFS-400:  Add a FileSelector based on regular expressions.
o VFS-254:  Let FileObject and FileContent extend java.io.Closeable. Thanks to mzawirski.
o VFS-252:  [SMB] SmbFileObject does not support setLastModifiedTime while jcifs supports it.
o VFS-313:  [FTP] Configuration does not include option for setting socket timeout. Thanks to bdavis@saintandreas.org.
o VFS-414:  [FTP] Add config API to set the file type.
o VFS-182:  [FTP] Usage of FTP with heterogeneous FTP server (possibility of using Ascii file type).
o VFS-381:  Iterate over a FileObject using the Java "foreach" statement, to provide all descendants of a FileObject.
o VFS-373:  Add FileContent write APIs.
o VFS-372:  Add constructors FileDepthSelector() and FileDepthSelector(int).
o VFS-371:  Add FileObject API deleteAll().
o VFS-370:  Add a FileExtensionSelector class.
o VFS-367:  Add APIs FileObject isFile(), FileObject isFolder(), and FileName isFile().

Fixed Bugs:
o VFS-424:  Fix StandardFileSystemManager class loading so it works in a OSGi environment.
o VFS-490:  [vfsclassloader] Do not open folders with .jar extension. Adds tests.
o VFS-582:  [tests] revert rename of getTestDirectoryFile to make test classes more compatible for external providers.
o VFS-480:  Make startup of SoftRefsFileCache cleaner thread work and less racy to avoid leaks.
o VFS-549:  Use File.separator instead of getProperty("file.separator").
o VFS-567:  [ftp] Ignore exceptions while QUIT/disconnect. Thanks to Antonio Petrelli.
o VFS-572:  [sftp] better documentation for knownhosts file option. Thanks to Sandra Parsick.
o VFS-574:  Ensure FileOperationProviders are closed. Adds some testcases.
            The error code for missing operations exceptions corrected: vfs.operation/operation-not-supported.error
o VFS-279:  [local] Avoid ClassCastException when replicating local files while OnCall caching is active. Thanks to Didier Earith, Simon Legner.
o VFS-297:  [sftp] VSF fails to reuse FileSystem instances if FileSystemOptions contain
            an array as value. Reported for SFTP using identities. Thanks to Kirill Safonov, Jimmy Praet.
o VFS-202:  [http] Allow URLs responding with 405 to HEAD requests. Thanks to Sergey Vladimirov, Simon Legner.
o VFS-490:  [hdfs] Make OSGi package imports for hdfs resolution=optional.
            Removed all scopes from dependency management.
o VFS-560:  [http] avoid initial HEAD request to root of HttpFileSystem as it might be wrong context.
o VFS-236:  [smb] Allow SMB to be used with no authentication. Thanks to Matt Casters.
o VFS-564:  Make some loggers static. Thanks to Dmitry Konstantinov.
o VFS-557:  [webdav][test] Create WebDav test directory in target/test. Avoid creating core/jackrabbit/tmp.
            Logfiles of Jackrabbit are preserved when -DWebdavProviderTestCase.Debug=true is specified.
o VFS-558:  Make moveTo() and getParent() work with CacheStrategy.ON_CALL.
            In case of FTP Provider it would lead otherwise to an UnsupportedOperationException.
o           [sandbox] RACRandomAccessFile is now in org.apache.commons.vfs2.util package (so sandbox has only one overlapping package).
o VFS-552:  [sandbox] include vfs-providers.xml in JAR for dynamic registration of mime and smb providers.
o VFS-551:  Javadoc: make it clear that DefaultCryptor is only an obfuscation function. Thanks to David Camilo Espitia Manrique.
o VFS-309:  DefaultFileContent will remove thread data whenever possible to avoid leaks.
o VFS-487:  DefaultFileMonitor detects recreated files. Thanks to Dave Marion.
o VFS-523:  [HDFS] Make HdfsFileObject.equal use system hashcode/equals instead of
            wrongly comparing file path only. Thanks to Roger Whitcomb.
o VFS-544:  [Virtual] Allow virtual file systems and virtual file system provider
            to be closed, to avoid memory leak.
o VFS-142:  Use ThreadLocal.remove() to clean out FileContentThreadData objects. Thanks to Ryan Boettcher.
o VFS-545:  Make DefaultFilesCache remove reference to filesystem when it is cleared (closed).
o VFS-521:  [Ram][Tests] Make RAM provider test pass on Java 8
            (JDK-8042377, self-suppression not permitted, MonitorOutputStream#close()).
o VFS-338:  [Local][Tests] Avoid IndexOutOfBoundsException when validating local file URIs. Thanks to Daniel R..
o VFS-489:  [tests] ProviderWriteTests#testListener does not fail cleanly. Thanks to Bernd Eckenfels.
o VFS-486:  DefaultFileMonitor sleeps for twice the specified delay when checkPerRun > 0. Thanks to Sam Haldane.
o VFS-482:  Wrong assertion messages in RAM provider test case.
o VFS-460:  Dependency to commons-compress set as optional.
o VFS-464:  StaticUserAuthenticator should return only requested authentication data.
o VFS-461:  [FTP/FTPS] ConfigBuilder does not consider system properties for the value of SoTimeout and Encoding.
o VFS-458:  [FTPS] Provider missed functionality and bug fixes already available for the FTP provider.
o VFS-452:  [HTTP] HttpFileObject read/write attributes should reflect underlying FileSystem capabilities. Thanks to Jean-Marc Borer.
o VFS-285:  AbstractFileObject.getChildren() may corrupt its internal state if a filename
            can not be resolved. Thanks to Kirill Safonov.
o VFS-450:  [HDFS] HDFSFileSystem.resolveFile() does not honor CacheStrategy.ON_RESOLVE. Thanks to Dave Marion.
o VFS-448:  commons-vfs 2.0 JAR has flawed OSGi MANIFEST.MF.
o VFS-439:  StaticUserAuthenticator usage example wrong. Thanks to pensecit.
o VFS-437:  [FTP] StackOverFlowError getting the type of a directory with a symbolic link to a parent directory with the same name. Thanks to denniszhu, danttran, jpowang.
o VFS-435:  FileSystemConfigBuilder does not use prefix for some system property lookups. Thanks to george scott.
o VFS-434:  FileSystemException should reuse IOException's chained exception.
o VFS-433:  [WebDAV] Message "vfs.provider.webdav/propfind.error" is not defined.
o VFS-430:  The SoftRefFilesCache class logs clear text password. Thanks to antonin.stefanutti.
o VFS-429:  Remove extra FileSystem ivar in AbstractFileObject subclasses with generics.
o VFS-427:  [HTTP] NPE on HttpFileObject.getContent().getContentInfo(). Thanks to awelynant.
o VFS-406:  [RAM] resize throws ArrayOOBE when shrinking in size. Thanks to mp1.
o VFS-353:  [FTP] Client should call logout before disconnecting. Thanks to bergander.
o VFS-408:  CompressedFileFileObject Exception thrown when container file has no extension. Thanks to anilm2@yahoo.com.
o VFS-258:  [SFTP][RAM] Unsafe casting to AbstractFileObject subclasses in doRename(). Thanks to mzawirski.
o VFS-413:  [FTP] No support for FTP servers with non Latin-1 control encoding. Thanks to polivenok.
o VFS-200:  [SFTP] Failure when files are very large.
o VFS-296:  [FTP] FTP socket timeout setting doesn't work if connect hangs. Thanks to andreasp.
o VFS-410:  [SFTP] SftpFileObject getInputStream(long) reads the whole file into memory. Thanks to mstockhammer.
o VFS-407:  [RAM] Reading a RAM FileSystem file fails because it never returns EOF -1. Thanks to mp1.
o VFS-382:  SFTP getChildren() does not fail when called on a file.
o VFS-380:  FTP connect.error message used instead of SFTP connect.error message.
o VFS-378:  Tar error message are missing from resource file.
o VFS-374:  Incorrect lazy initialization of static field org.apache.commons.vfs2.util.Messages.resources in org.apache.commons.vfs2.util.Messages.findMessage(String)Add FileContent write APIs.
o VFS-355:  The read method of RamFileRandomAccessContent's input stream does not return -1 at eof. Thanks to Miroslav Pokorny.
o VFS-356:  Throw an IOException if an attempt is made to seek to a position before the start of the file.
o VFS-359:  Don't delete a RamFileObject if it is open. Thanks to Miroslav Pokorny.
o VFS-352:  ZipFileSystem now uses an internal Map as a cache for all the files in the zip archive.
o VFS-351:  Chain the SftpException in the FileSystemException. Thanks to John Backstrand.
o VFS-325:  Allow # character in file names. Thanks to Larry Reeve.
o VFS-335:  Use atomic variables in MonitorInputStream.
o VFS-364:  Check the href in the response for just a path in addition to a full uri.

Changes:
o VFS-607:  Update Apache Commons Compress from 1.10 to 1.11.
o VFS-608:  Update Apache Commons Net from 3.4 to 3.5.
o VFS-530:  [hdfs] Use stable Apache Hadoop 2.6 dependencies. Thanks to Dave Marion.
o VFS-601:  Update Apache Commons Net from 3.3 to 3.4.
o VFS-602:  Update Apache Commons IO from 2.4 to 2.5.
o VFS-579:  Update Jsch from 0.1.51 to 0.1.53.
o VFS-542:  Update Jsch from 0.1.50 to 0.1.51.
o VFS-578:  Update Apache Commons Compress from 1.9 to 1.10.
o VFS-541:  Update Apache Commons Compress from 1.6 to 1.9.
o VFS-540:  Update Apache Commons Logging from 1.1.3 to 1.2.
o VFS-539:  Update Apache Commons Lang from 3.1 to 3.3.2.
o VFS-526:  [HDFS][Tests] Support HDFS testing on Windows (but keep profile "no-hdfs" enabled on Windows VFS-529).
o VFS-453:  [HTTP][WEBDAV] Add file system options for connect and socket timeout. Thanks to Jiri Syrovy.
o VFS-167:  [FTP] Allow Proxy support to file system options. Thanks to Jimmy Praet.
o VFS-520:  Make Javadoc compatible with Java 8 tool.
o VFS-518:  Documentation of FileSystemOptions should be more helpful. Thanks to Roland Illig.
o VFS-500:  VFSClassLoader.findResources missing. Thanks to Bernd Eckenfels.
o VFS-514:  [tests] PermissionsTests leaves unclean test directory. Thanks to Bernd Eckenfels.
o VFS-501:  Hide passwords from log/console output. Thanks to Yves Schumann.
o VFS-496:  Resource translation issues. Thanks to Bernd Eckenfels.
o VFS-494:  [SFTP] No support for SFTP servers with non Latin-1 file name encoding. Thanks to Allen Xudong Cheng.
o VFS-368:  [SFTP] Documentation implies that "userDirIsRoot" defaults to true. Thanks to Brendan Long.
o VFS-265:  [FTP] Set user dir as root dir by default. Thanks to Scott Bjerstedt.
o VFS-484:  [SFTP] Update Jsch to 0.1.50 from 0.1.49.
o VFS-507:  Update to Apache Commons Collection 4.1 from 3.2.1 and use generics.
o VFS-476:  Update Apache Commons Logging to 1.1.3 from 1.1.2.
o VFS-475:  Update Apache Commons Net to 3.3 from 3.2.
o VFS-506:  [Tar][Bzip2] Update Apache Commons Compress to 1.6 from 1.5.
o VFS-471:  Update to Apache Commons Compress 1.5.
o VFS-283:  [SFTP] SFTP provider did not support passphrase-protected keys nor the exchange of a public key with
            a requesting SFTP server. To support such triples (private key/passphrase/public key) instead of private
            keys only, a new structure EntityInfo has been created. SftpFileSystemConfigBuilder has now the new
            getter and setter methods getIdentityInfo and setIdentity info which replace the now deprecated methods
            getIdentities and setIdentities.
o VFS-463:  FileSystemConfigBuilder supports system properties for the value of enum-based configuration entries.
o VFS-462:  [FTPS] Deprecate FtpsFileSystemConfigBuilder.setFtpsType and FtpsFileSystemConfigBuilder.getFtpsType
            in favor of FtpsFileSystemConfigBuilder.setFtpsMode and FtpsFileSystemConfigBuilder.getFtpsMode which
            use new enum FtpsMode instead.
o VFS-459:  [FTP/FTPS] Sent commands and the received answer is logged at debug level.
o VFS-457:  Update test dependencies: sshd-core version 0.7.0 to 0.8.0; mina-core 2.0.4 to 2.0.7; junit 4.11 to 4.12; slf4j-* 1.5.5 to 1.5.11
o VFS-456:  Use org.bouncycastle:bcprov-jdk16 instead of org.bouncycastle:bcprof-jdk15on since Java 1.6 is required.
o VFS-415:  Update VFS requirement to Java 1.6.
o VFS-418:  Update to Apache Commons Compress 1.4.1.
o VFS-321:  AbstractFileObject sometimes uses getFileSystem() and sometimes references "fs" field directly. Thanks to sebb.
o VFS-327:  UriParser.canonicalizePath possible NPE for filenameParser. Thanks to sebb.
o VFS-416:  [SFTP] Update Jsch to version 0.1.49 from 0.1.47.
o VFS-395:  [POM] Remove maven-scm-* dependencies.
o VFS-411:  [SFTP] Update Jsch to version 0.1.47 from 0.1.46.
o VFS-409:  Update Apache Commons Compress to 1.4 from 1.3.
o VFS-404:  [FTP][FTPS] Update Apache Commons Net to 3.1 from 3.0.1.
o VFS-402:  [WebDAV] Update Apache Jackrabbit 1.5.2 to 1.6.5.
o VFS-401:  Update JSch to 0.1.46 from 0.1.45 for the SFTP provider.
o VFS-392:  Build tests WebDAV file system with an embedded WebDAV server (Apache Jackrabbit).
o VFS-391:  Build tests URL HTTP file system with an embedded HTTP server (Apache HttpComponent Core).
o VFS-390:  Use variable argument list in org.apache.commons.vfs2.util.Messages instead of Object[].
o VFS-389:  Use variable argument lists in FileSystemException instead of Object[]s.
o VFS-388:  Build tests SFTP file system with an embedded SFTP server (Apache MINA).
o VFS-387:  Build tests FTP file system with an embedded FTP server (Apache MINA).
o VFS-386:  Build tests HTTP file system with an embedded HTTP server (Apache HttpComponent Core).
o VFS-385:  Add HTTP status code to HTTP file provider exception messages when available.
o VFS-384:  Update Apache Commons Net to 3.0.1 from 2.2 for FTP and SFTP providers.
o VFS-383:  Update JSch to 0.1.45 from 0.1.42 for the SFTP provider.
o VFS-379:  Replace custom BZIP2 code with Apache Commons Compress 1.3.
o VFS-377:  Replace custom TAR code with Apache Commons Compress 1.3.
o VFS-375:  Upgrade to Apache Commons Compress 1.3 from 1.2.
o VFS-366:  Can't sort a List of FileObject's, FileObject to implement Comparable<FileObject>.
o VFS-341:  Enable logging of JSch using the Commons Logging Log object in SftpClientFactory. Thanks to Rajika Kumarasiri.
o VFS-361:  Upgrade commons collections version to 3.2.1.

Removed:
o VFS-469:  Remove unused dependency to javax.jcr:jcr.

Historical list of changes: https://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS website:

Visit https://commons.apache.org/proper/commons-vfs/

Download it from https://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------
