SFTP客户端连接

最近项目使用SFTP很多,在使用过程中遇到很多问题,把自己用到的和同事指导后的代码整理出发,记录一下:

需要引用的jar:

jsch-0.1.53.jar

SFTPClient类:

public class SFTPClient {
    private static final Logger logger = Logger.getLogger(SFTPClient.class);

    private static int timeoutSecond = 20;
    private Session session;
    private ChannelSftp channel;

    private SFTPClient(Session session, ChannelSftp channel) {
        this.session = session;
        this.channel = channel;
    }

    public static final SFTPClient connect(String ip, int port, String userName, String password) throws Exception {
        if (StringUtils.isEmpty(ip)||StringUtils.isEmpty(userName)||StringUtils.isEmpty(password)) {
			throw new Exception("连接SFTP参数异常");
		}
        Session session = null;
        Channel channel = null;
        try {
            JSch jsch = new JSch();
            session = jsch.getSession(userName, ip, port);
            session.setPassword(password);
            Properties sshConfig = new Properties();
            sshConfig.put("StrictHostKeyChecking", "no");
            session.setConfig(sshConfig);
            session.connect();
            channel = session.openChannel("sftp");
            channel.connect(timeoutSecond * 1000);
            logger.info(" Sftp connect success");
            return new SFTPClient(session, (ChannelSftp) channel);
        } catch (JSchException e) {
            logger.error(" Sftp connect error : ", e);
            IOUtils.closeQuietly(channel);
            IOUtils.closeQuietly(session);
            throw new Exception(" Sftp connect error : "+e.getMessage());
        }
    }

    public void close() {
    	IOUtils.closeQuietly(channel);
        IOUtils.closeQuietly(session);
    }
    
    

}


StringUtils工具类:
public class StringUtils {

	/**
	 * 判断字符串是否为空,为空返回true
	 */
	public static boolean isEmpty(String str) {
		return (str == null || "".equals(str.trim()) || "null".equals(str
				.trim()));
	}
	
}


IOUtils工具类:
public class IOUtils extends org.apache.commons.io.IOUtils{
    public static void closeQuietly(Session session){
    	if (session != null) {
			session.disconnect();
		}
    }
    
    public static void closeQuietly(Channel channel){
    	if (channel != null) {
			channel.disconnect();
		}
    }

}



SFTP使用过程完要记得关闭相应的会话session和通道channel,避免连接过多导致不能创建新的SFTP连接,代码仅供参考,
有不对的请包涵和指正


猜你喜欢

转载自blog.csdn.net/x917998124/article/details/76685969