超详细的SFtp工具类及使用

1.SFtp 与Ftp 的区别:

简单来说,SFtp安全性高

2.SFtp工具类

import com.jcraft.jsch.*;
import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Vector;

public class SFtpUtils {
    Logger log = LoggerFactory.getLogger(SFtpUtils.class);
    private Session session = null;
    private ChannelSftp channel = null;
    //服务器ip地址
    public String host;
    //端口号
    public int port;
    //连接超时时间(单位:秒)
    private int timeout;
    //用户名
    public String username;
    //密码
    public String password;

    /**
     * SFTP 安全文件传送协议
     *
     * @param host     SFTP服务器IP地址
     * @param port     SFTP服务器端口
     * @param timeout  连接超时时间,单位毫秒
     * @param username 用户名
     * @param password 密码
     */
    public SFtpUtils(String host, int port, int timeout, String username, String password) {
        this.host = host;
        this.port = port;
        this.timeout = timeout;
        this.username = username;
        this.password = password;
    }

    /**
     * 登录sftp
     *
     * @return
     */
    public boolean login() {
        try {
            JSch jSch = new JSch();
            session = jSch.getSession(username, host, port);
            if (password != null) {
                session.setPassword(password);
            }
            Properties config = new Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);
            session.setTimeout(timeout);
            session.connect();

            channel = (ChannelSftp) session.openChannel("sftp");
            channel.connect();
            return true;
        } catch (Exception e) {
            log.error("sftp 服务器登录失败! " + e);
            return false;
        }
    }

    /**
     * 登出
     */
    public void logout() {
        if (channel != null) {
            channel.quit();
            channel.disconnect();
        }
        if (session != null) {
            session.disconnect();
        }
    }

    /**
     * 上传文件
     *
     * @param pathName 服务器目录
     * @param fileName 服务器上保存的文件名
     * @param is       输入文件流
     * @return
     */
    public boolean uploadFile(String pathName, String fileName, InputStream is) {
        if (!changeDir(pathName)) {
            return false;
        }
        try {
            channel.put(is, fileName, ChannelSftp.OVERWRITE);
            if (!existFile(fileName)) {
                return false;
            }
            return true;
        } catch (SftpException e) {
            log.error("上传文件失败!", e);
            return false;
        } finally {
            //changeDir(currentDir());
        }
    }

    /**
     * 上传文件
     *
     * @param pathName  服务器目录
     * @param fileName  服务器上保存的文件名
     * @param localFile 本地文件
     * @return
     */
    public boolean uploadFile(String pathName, String fileName, String localFile) {
        if (!changeDir(pathName)) {
     
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值