Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Added a Q and A for "How do I keep an SFTP connection from hanging?"

...

VfsCookbook - a cookbook has been started

How

...

can I enter ftp passive mode?

No Format
FileSystemOptions opts = new FileSystemOptions();
FtpFileSystemConfigBuilder.getInstance().setPassiveMode(opts, true);
FileObject fo = VFS.getManager().resolveFile("ftp://host/path_to/file.txt", opts);

How

...

do I use the org.apache.commons.vfs.FileSelector or org.apache.commons.vfs.FileFilter?

The FileFilter can be used to mimic the java.io.FileFilter interface.

...

No Format
FileSelector ff = new FileSelector()
{
    public boolean includeFile(FileSelectInfo fileInfo) throws Exception
    {
        FileObject fo = fileInfo.getFile();
        return fo.getName().getBaseName().startsWith("ABC-");
    }

    public boolean traverseDescendents(FileSelectInfo fileInfo) throws Exception
    {
        return true;
    }   		
};
VFS.getManager().resolveFile("/base/folder").findFiles(ff);

How do I keep an SFTP connection from hanging?

If your program is transferring files, but not exiting afterward, this is actually an issue with properly closing down the connection when you are done. If you acquired a FileSystemManager with

No Format

private FileSystemManager fsManager = VFS.getManager();

Wiki Markup
the getManager() method probably returned a \[http://commons.apache.org/vfs/apidocs/org/apache/commons/vfs/impl/StandardFileSystemManager.html StandardFileSystemManager\] which extends the DefaultFileSystemManager class and implements the FileSystemManager interface.

Wiki Markup
What you are probably after is the \[http://commons.apache.org/vfs/apidocs/org/apache/commons/vfs/impl/DefaultFileSystemManager.html#close() close()\] method of the DefaultFileSystemManager to clean up any temporary files and close all providers. Cast the FileSystemManager to a DefaultFileSystemManager access the close() method like this:

No Format

((DefaultFileSystemManager) fsManager).close();