Class FTPClientWrapper

  • All Implemented Interfaces:
    FtpClient

    public class FTPClientWrapper
    extends java.lang.Object
    implements FtpClient
    A wrapper to the FTPClient to allow automatic reconnect on connection loss.

    I decided to not to use eg. noop() to determine the state of the connection to avoid unnecessary server round-trips.

    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean abort()
      Aborts the current operation.
      java.io.OutputStream appendFileStream​(java.lang.String relPath)
      Returns an OutputStream through which data can be written to append to a file on the server with the given name.
      boolean completePendingCommand()
      There are a few FTPClient methods that do not complete the entire sequence of FTP commands to complete a transaction.
      protected org.apache.commons.net.ftp.FTPClient createClient​(GenericFileName rootFileName, UserAuthenticationData authData)
      Creates an FTPClient.
      boolean deleteFile​(java.lang.String relPath)
      Deletes a file on the FTP server.
      void disconnect()
      Sends the FTP QUIT command to the server, receive the reply, and return the reply code.
      FileSystemOptions getFileSystemOptions()
      Gets the FileSystemOptions.
      int getReplyCode()
      Gets the integer value of the reply code of the last FTP reply.
      java.lang.String getReplyString()
      Gets the entire text of the last FTP server response exactly as it was received, including all end of line markers in NETASCII format.
      GenericFileName getRoot()
      Gets the root file name.
      boolean hasFeature​(java.lang.String feature)
      Queries the server for a supported feature.
      boolean isConnected()
      Tests if the client is currently connected to a server.
      org.apache.commons.net.ftp.FTPFile[] listFiles​(java.lang.String relPath)
      Using the default system autodetect mechanism, obtain a list of file information for the current working directory or for just a single file.
      boolean makeDirectory​(java.lang.String relPath)
      Creates a new subdirectory on the FTP server in the current directory (if a relative pathname is given) or where specified (if an absolute pathname is given).
      java.time.Instant mdtmInstant​(java.lang.String relPath)
      Sends the MDTM command to get a file's date and time information after file transfer.
      boolean removeDirectory​(java.lang.String relPath)
      Removes a directory on the FTP server (if empty).
      boolean rename​(java.lang.String oldName, java.lang.String newName)
      Renames a remote file.
      java.io.InputStream retrieveFileStream​(java.lang.String relPath)
      Returns an InputStream from which a named file from the server can be read.
      java.io.InputStream retrieveFileStream​(java.lang.String relPath, int bufferSize)
      Returns an InputStream from which a named file from the server can be read.
      java.io.InputStream retrieveFileStream​(java.lang.String relPath, long restartOffset)
      Returns an InputStream from which a named file from the server can be read.
      void setBufferSize​(int bufferSize)
      Sets the buffer size for buffered data streams.
      java.io.OutputStream storeFileStream​(java.lang.String relPath)
      Returns an OutputStream through which data can be written to store a file on the server using the given name.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Method Detail

      • abort

        public boolean abort()
                      throws java.io.IOException
        Description copied from interface: FtpClient
        Aborts the current operation.
        Specified by:
        abort in interface FtpClient
        Returns:
        true if aborted.
        Throws:
        java.io.IOException - If an I/O error occurs
      • appendFileStream

        public java.io.OutputStream appendFileStream​(java.lang.String relPath)
                                              throws java.io.IOException
        Description copied from interface: FtpClient
        Returns an OutputStream through which data can be written to append to a file on the server with the given name.
        Specified by:
        appendFileStream in interface FtpClient
        Parameters:
        relPath - The name of the remote file.
        Returns:
        An OutputStream through which the remote file can be appended.
        Throws:
        java.io.IOException - If an I/O error occurs.
      • completePendingCommand

        public boolean completePendingCommand()
                                       throws java.io.IOException
        Description copied from interface: FtpClient
        There are a few FTPClient methods that do not complete the entire sequence of FTP commands to complete a transaction. These commands require some action by the programmer after the reception of a positive intermediate command. After the programmer's code completes its actions, it must call this method to receive the completion reply from the server and verify the success of the entire transaction.
        Specified by:
        completePendingCommand in interface FtpClient
        Returns:
        true if successfully completed, false if not.
        Throws:
        java.io.IOException - If an I/O error occurs.
      • deleteFile

        public boolean deleteFile​(java.lang.String relPath)
                           throws java.io.IOException
        Description copied from interface: FtpClient
        Deletes a file on the FTP server.
        Specified by:
        deleteFile in interface FtpClient
        Parameters:
        relPath - The relPath of the file to be deleted.
        Returns:
        true if successfully completed, false if not.
        Throws:
        java.io.IOException - If an I/O error occurs.
      • disconnect

        public void disconnect()
                        throws java.io.IOException
        Description copied from interface: FtpClient
        Sends the FTP QUIT command to the server, receive the reply, and return the reply code.
        Specified by:
        disconnect in interface FtpClient
        Throws:
        java.io.IOException - If an I/O error occurs.
      • getReplyCode

        public int getReplyCode()
                         throws java.io.IOException
        Description copied from interface: FtpClient
        Gets the integer value of the reply code of the last FTP reply.
        Specified by:
        getReplyCode in interface FtpClient
        Returns:
        The integer value of the reply code of the last FTP reply.
        Throws:
        java.io.IOException - If an I/O error occurs.
      • getReplyString

        public java.lang.String getReplyString()
                                        throws java.io.IOException
        Description copied from interface: FtpClient
        Gets the entire text of the last FTP server response exactly as it was received, including all end of line markers in NETASCII format.
        Specified by:
        getReplyString in interface FtpClient
        Returns:
        The entire text from the last FTP response as a String.
        Throws:
        java.io.IOException - If an I/O error occurs.
      • hasFeature

        public boolean hasFeature​(java.lang.String feature)
                           throws java.io.IOException
        Queries the server for a supported feature.
        Specified by:
        hasFeature in interface FtpClient
        Parameters:
        feature - the name of the feature, converted to upper case.
        Returns:
        true if the feature is present, false if the feature is not present or the FTP command failed.
        Throws:
        java.io.IOException - If an I/O error occurs.
      • listFiles

        public org.apache.commons.net.ftp.FTPFile[] listFiles​(java.lang.String relPath)
                                                       throws java.io.IOException
        Description copied from interface: FtpClient
        Using the default system autodetect mechanism, obtain a list of file information for the current working directory or for just a single file.

        TODO This interface should not leak Apache Commons NET types like FTPFile

        Specified by:
        listFiles in interface FtpClient
        Parameters:
        relPath - The file or directory to list.
        Returns:
        an array of FTPFile.
        Throws:
        java.io.IOException - If an I/O error occurs.
      • makeDirectory

        public boolean makeDirectory​(java.lang.String relPath)
                              throws java.io.IOException
        Description copied from interface: FtpClient
        Creates a new subdirectory on the FTP server in the current directory (if a relative pathname is given) or where specified (if an absolute pathname is given).
        Specified by:
        makeDirectory in interface FtpClient
        Parameters:
        relPath - The pathname of the directory to create.
        Returns:
        true if successfully completed, false if not.
        Throws:
        java.io.IOException - If an I/O error occurs.
      • mdtmInstant

        public java.time.Instant mdtmInstant​(java.lang.String relPath)
                                      throws java.io.IOException
        Sends the MDTM command to get a file's date and time information after file transfer. It is typically more accurate than the "LIST" command response. Time values are always represented in UTC (GMT), and in the Gregorian calendar regardless of what calendar may have been in use at the date and time the file was last modified.

        NOTE: not all remote FTP servers support MDTM.

        Specified by:
        mdtmInstant in interface FtpClient
        Parameters:
        relPath - The relative path of the file object to execute MDTM command against
        Returns:
        new Instant object containing the MDTM timestamp.
        Throws:
        java.io.IOException - If an I/O error occurs.
      • removeDirectory

        public boolean removeDirectory​(java.lang.String relPath)
                                throws java.io.IOException
        Description copied from interface: FtpClient
        Removes a directory on the FTP server (if empty).
        Specified by:
        removeDirectory in interface FtpClient
        Parameters:
        relPath - The pathname of the directory to remove.
        Returns:
        true if successfully completed, false if not.
        Throws:
        java.io.IOException - If an I/O error occurs.
      • rename

        public boolean rename​(java.lang.String oldName,
                              java.lang.String newName)
                       throws java.io.IOException
        Description copied from interface: FtpClient
        Renames a remote file.
        Specified by:
        rename in interface FtpClient
        Parameters:
        oldName - The name of the remote file to rename.
        newName - The new name of the remote file.
        Returns:
        true if successfully completed, false if not.
        Throws:
        java.io.IOException - If an I/O error occurs.
      • retrieveFileStream

        public java.io.InputStream retrieveFileStream​(java.lang.String relPath)
                                               throws java.io.IOException
        Description copied from interface: FtpClient
        Returns an InputStream from which a named file from the server can be read.
        Specified by:
        retrieveFileStream in interface FtpClient
        Parameters:
        relPath - The name of the remote file.
        Returns:
        An InputStream from which the remote file can be read.
        Throws:
        java.io.IOException - If an I/O error occurs.
      • retrieveFileStream

        public java.io.InputStream retrieveFileStream​(java.lang.String relPath,
                                                      int bufferSize)
                                               throws java.io.IOException
        Description copied from interface: FtpClient
        Returns an InputStream from which a named file from the server can be read.
        Specified by:
        retrieveFileStream in interface FtpClient
        Parameters:
        relPath - The name of the remote file.
        bufferSize - buffer size.
        Returns:
        An InputStream from which the remote file can be read.
        Throws:
        java.io.IOException - If an I/O error occurs.
      • retrieveFileStream

        public java.io.InputStream retrieveFileStream​(java.lang.String relPath,
                                                      long restartOffset)
                                               throws java.io.IOException
        Description copied from interface: FtpClient
        Returns an InputStream from which a named file from the server can be read.
        Specified by:
        retrieveFileStream in interface FtpClient
        Parameters:
        relPath - The name of the remote file.
        restartOffset - restart offset.
        Returns:
        An InputStream from which the remote file can be read.
        Throws:
        java.io.IOException - If an I/O error occurs.
      • storeFileStream

        public java.io.OutputStream storeFileStream​(java.lang.String relPath)
                                             throws java.io.IOException
        Description copied from interface: FtpClient
        Returns an OutputStream through which data can be written to store a file on the server using the given name.
        Specified by:
        storeFileStream in interface FtpClient
        Parameters:
        relPath - The name to give the remote file.
        Returns:
        An OutputStream through which the remote file can be written.
        Throws:
        java.io.IOException - If an I/O error occurs.