Class SftpFileSystem
- java.lang.Object
-
- org.apache.commons.vfs2.provider.AbstractVfsComponent
-
- org.apache.commons.vfs2.provider.AbstractFileSystem
-
- org.apache.commons.vfs2.provider.sftp.SftpFileSystem
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
,FileSystem
,VfsComponent
public class SftpFileSystem extends AbstractFileSystem
Represents the files on an SFTP server.
-
-
Field Summary
Fields Modifier and Type Field Description private java.time.Duration
connectTimeout
private static int
EXEC_BUFFER_SIZE
private boolean
execDisabled
Some SFTP-only servers disable the exec channel.private int[]
groupsIds
Cache for the user groups ids (null when not set)private com.jcraft.jsch.ChannelSftp
idleChannel
private static long
LAST_MOD_TIME_ACCURACY
private static org.apache.commons.logging.Log
LOG
private com.jcraft.jsch.Session
session
Session; never null.private static int
SLEEP_MILLIS
private int
uid
Cache for the user ID (-1 when not set)private static int
UNIDENTIFED
-
Constructor Summary
Constructors Modifier Constructor Description protected
SftpFileSystem(GenericFileName rootName, com.jcraft.jsch.Session session, FileSystemOptions fileSystemOptions)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
addCapabilities(java.util.Collection<Capability> caps)
Adds the capabilities of this file system.protected FileObject
createFile(AbstractFileName name)
Creates a file object.private boolean
detectExecDisabled()
Some SFTP-only servers disable the exec channel.protected void
doCloseCommunicationLink()
Closes the underlying link used to access the files.private int
executeCommand(java.lang.String command, java.lang.StringBuilder output)
Executes a command and returns the (standard) output through a StringBuilder.protected com.jcraft.jsch.ChannelSftp
getChannel()
Returns an SFTP channel to the server.int[]
getGroupsIds()
Gets the (numeric) group IDs.double
getLastModTimeAccuracy()
Last modification time is only an int and in seconds, thus can be off by 999.private com.jcraft.jsch.Session
getSession()
Ensures that the session link is established.int
getUId()
Gets the (numeric) group IDs.boolean
isExecDisabled()
protected void
putChannel(com.jcraft.jsch.ChannelSftp channelSftp)
Returns a channel to the pool.-
Methods inherited from class org.apache.commons.vfs2.provider.AbstractFileSystem
addJunction, addListener, close, closeCommunicationLink, decorateFileObject, doReplicateFile, fireFileChanged, fireFileCreated, fireFileDeleted, getAttribute, getFileFromCache, getFileSystemManager, getFileSystemOptions, getParentLayer, getRoot, getRootName, getRootURI, hasCapability, init, isOpen, isReleaseable, notifyAllStreamsClosed, putFileToCache, removeFileFromCache, removeJunction, removeListener, replicateFile, resolveFile, resolveFile, setAttribute
-
Methods inherited from class org.apache.commons.vfs2.provider.AbstractVfsComponent
getContext, getLogger, setContext, setLogger
-
-
-
-
Field Detail
-
LOG
private static final org.apache.commons.logging.Log LOG
-
UNIDENTIFED
private static final int UNIDENTIFED
- See Also:
- Constant Field Values
-
SLEEP_MILLIS
private static final int SLEEP_MILLIS
- See Also:
- Constant Field Values
-
EXEC_BUFFER_SIZE
private static final int EXEC_BUFFER_SIZE
- See Also:
- Constant Field Values
-
LAST_MOD_TIME_ACCURACY
private static final long LAST_MOD_TIME_ACCURACY
- See Also:
- Constant Field Values
-
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 java.time.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 Detail
-
SftpFileSystem
protected SftpFileSystem(GenericFileName rootName, com.jcraft.jsch.Session session, FileSystemOptions fileSystemOptions)
-
-
Method Detail
-
addCapabilities
protected void addCapabilities(java.util.Collection<Capability> caps)
Adds the capabilities of this file system.- Specified by:
addCapabilities
in classAbstractFileSystem
- 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 classAbstractFileSystem
- 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 classAbstractFileSystem
-
executeCommand
private int executeCommand(java.lang.String command, java.lang.StringBuilder output) throws com.jcraft.jsch.JSchException, java.io.IOException
Executes a command and returns the (standard) output through a StringBuilder.- Parameters:
command
- The commandoutput
- 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.java.io.IOException
- if an I/O error is detected.
-
getChannel
protected com.jcraft.jsch.ChannelSftp getChannel() throws java.io.IOException
Returns an SFTP channel to the server.- Returns:
- new or reused channel, never null.
- Throws:
FileSystemException
- if a session cannot be created.java.io.IOException
- if an I/O error is detected.
-
getGroupsIds
public int[] getGroupsIds() throws com.jcraft.jsch.JSchException, java.io.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.java.io.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 interfaceFileSystem
- Overrides:
getLastModTimeAccuracy
in classAbstractFileSystem
- 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, java.io.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.java.io.IOException
- if an I/O error is detected.- Since:
- 2.1
-
isExecDisabled
public boolean isExecDisabled()
- Returns:
- Whether the exec channel is disabled.
- See Also:
execDisabled
-
putChannel
protected void putChannel(com.jcraft.jsch.ChannelSftp channelSftp)
Returns a channel to the pool.- Parameters:
channelSftp
- the SFTP channel.
-
-