Class SftpFileSystem

All Implemented Interfaces:
Closeable, AutoCloseable, FileSystem, VfsComponent

public class SftpFileSystem extends AbstractFileSystem
Represents the files on an SFTP server.
  • Field Details

    • LOG

      private static final org.apache.commons.logging.Log LOG
    • UNIDENTIFED

      private static final int UNIDENTIFED
      See Also:
    • SLEEP_MILLIS

      private static final int SLEEP_MILLIS
      See Also:
    • EXEC_BUFFER_SIZE

      private static final int EXEC_BUFFER_SIZE
      See Also:
    • LAST_MOD_TIME_ACCURACY

      private static final long LAST_MOD_TIME_ACCURACY
      See Also:
    • session

      private volatile com.jcraft.jsch.Session session
      Session; never null.

      DCL pattern requires that the ivar be volatile.

    • idleChannel

      private volatile com.jcraft.jsch.ChannelSftp idleChannel
    • connectTimeout

      private final Duration connectTimeout
    • uid

      private volatile int uid
      Cache for the user ID (-1 when not set)

      DCL pattern requires that the ivar be volatile.

    • groupsIds

      private volatile int[] groupsIds
      Cache for the user groups ids (null when not set)

      DCL pattern requires that the ivar be volatile.

    • execDisabled

      private final boolean execDisabled
      Some SFTP-only servers disable the exec channel. When exec is disabled, things like getUId() will always fail.
  • Constructor Details

  • Method Details

    • addCapabilities

      protected void addCapabilities(Collection<Capability> caps)
      Adds the capabilities of this file system.
      Specified by:
      addCapabilities in class AbstractFileSystem
      Parameters:
      caps - collections of Capabilities, can be immutable.
    • createFile

      protected FileObject createFile(AbstractFileName name) throws FileSystemException
      Creates a file object. This method is called only if the requested file is not cached.
      Specified by:
      createFile in class AbstractFileSystem
      Parameters:
      name - name referencing the new file.
      Returns:
      new created FileObject.
      Throws:
      FileSystemException
    • detectExecDisabled

      private boolean detectExecDisabled()
      Some SFTP-only servers disable the exec channel. Attempt to detect this by calling getUid.
    • doCloseCommunicationLink

      protected void doCloseCommunicationLink()
      Description copied from class: AbstractFileSystem
      Closes the underlying link used to access the files.
      Overrides:
      doCloseCommunicationLink in class AbstractFileSystem
    • executeCommand

      private int executeCommand(String command, StringBuilder output) throws com.jcraft.jsch.JSchException, IOException
      Executes a command and returns the (standard) output through a StringBuilder.
      Parameters:
      command - The command
      output - The output
      Returns:
      The exit code of the command
      Throws:
      com.jcraft.jsch.JSchException - if a JSch error is detected.
      FileSystemException - if a session cannot be created.
      IOException - if an I/O error is detected.
    • getChannel

      protected com.jcraft.jsch.ChannelSftp getChannel() throws IOException
      Returns an SFTP channel to the server.
      Returns:
      new or reused channel, never null.
      Throws:
      FileSystemException - if a session cannot be created.
      IOException - if an I/O error is detected.
    • getGroupsIds

      public int[] getGroupsIds() throws com.jcraft.jsch.JSchException, IOException
      Gets the (numeric) group IDs.
      Returns:
      the (numeric) group IDs.
      Throws:
      com.jcraft.jsch.JSchException - If a problem occurs while retrieving the group IDs.
      IOException - if an I/O error is detected.
      Since:
      2.1
    • getLastModTimeAccuracy

      public double getLastModTimeAccuracy()
      Last modification time is only an int and in seconds, thus can be off by 999.
      Specified by:
      getLastModTimeAccuracy in interface FileSystem
      Overrides:
      getLastModTimeAccuracy in class AbstractFileSystem
      Returns:
      1000
    • getSession

      private com.jcraft.jsch.Session getSession() throws FileSystemException
      Ensures that the session link is established.
      Throws:
      FileSystemException - if a session cannot be created.
    • getUId

      public int getUId() throws com.jcraft.jsch.JSchException, IOException
      Gets the (numeric) group IDs.
      Returns:
      The numeric user ID
      Throws:
      com.jcraft.jsch.JSchException - If a problem occurs while retrieving the group ID.
      IOException - if an I/O error is detected.
      Since:
      2.1
    • isExecDisabled

      public boolean isExecDisabled()
      Returns:
      Whether the exec channel is disabled.
      See Also:
    • putChannel

      protected void putChannel(com.jcraft.jsch.ChannelSftp channelSftp)
      Returns a channel to the pool.
      Parameters:
      channelSftp - the SFTP channel.