in commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystem.java [200:243]
protected ChannelSftp getChannel() throws IOException {
try {
// Use the pooled channel, or create a new one
ChannelSftp channel = null;
if (idleChannel != null) {
synchronized (this) {
if (idleChannel != null) {
channel = idleChannel;
idleChannel = null;
}
}
}
if (channel == null) {
channel = (ChannelSftp) getSession().openChannel("sftp");
channel.connect(DurationUtils.toMillisInt(connectTimeout));
final Boolean userDirIsRoot = SftpFileSystemConfigBuilder.getInstance()
.getUserDirIsRoot(getFileSystemOptions());
final String workingDirectory = getRootName().getPath();
if (workingDirectory != null && (userDirIsRoot == null || !userDirIsRoot.booleanValue())) {
try {
channel.cd(workingDirectory);
} catch (final SftpException e) {
throw new FileSystemException("vfs.provider.sftp/change-work-directory.error", workingDirectory,
e);
}
}
}
final String fileNameEncoding = SftpFileSystemConfigBuilder.getInstance()
.getFileNameEncoding(getFileSystemOptions());
if (fileNameEncoding != null) {
try {
channel.setFilenameEncoding(fileNameEncoding);
} catch (final SftpException e) {
throw new FileSystemException("vfs.provider.sftp/filename-encoding.error", fileNameEncoding);
}
}
return channel;
} catch (final JSchException e) {
throw new FileSystemException("vfs.provider.sftp/connect.error", getRootName(), e);
}
}