package com.xydl.cac.util;

import com.jcraft.jsch.*;

import java.io.*;
import java.util.Properties;
import java.util.Vector;

public class SFTPTool {
    Session session = null;
    ChannelSftp sftp = null;

    /**
     * 1. 第一步:连接sftp服务器
     *
     * @param host     主机
     * @param port     端口
     * @param username 用户名
     * @param password 密码
     * @return
     */
    public void connect(String host, int port, String username, String password) throws JSchException {
        JSch jsch = new JSch();
        session = jsch.getSession(username, host, port);
        session.setPassword(password);
        Properties sshConfig = new Properties();
        sshConfig.put("StrictHostKeyChecking", "no");
        session.setConfig(sshConfig);
        session.connect();
        Channel channel = session.openChannel("sftp");
        channel.connect();
        sftp = (ChannelSftp) channel;
    }

    /**
     * 3.最后一步:关闭 channel和session
     */
    public void disconnect() {
        try {
            if (sftp != null && sftp.isConnected()) {
                sftp.disconnect();
            }
        } catch (Exception ignore) {
        }
        try {
            if (session != null && session.isConnected()) {
                session.disconnect();
            }
        } catch (Exception ignore) {
        }
    }

    public void upload(String localFilePath, String remoteFileName) throws Exception {
        sftp.put(new FileInputStream(localFilePath), remoteFileName);
    }

    public void download(String remoteFileName, String localFilePath) throws Exception {
        String tmpFile = localFilePath + ".tmp";
        sftp.get(remoteFileName, new FileOutputStream(tmpFile));
        File file = new File(tmpFile);
        file.renameTo(new File(localFilePath));
    }

    public void delete(String remoteFileName) throws SftpException {
        sftp.rm(remoteFileName);
    }

    public Vector listFiles(String remotePath) throws SftpException {
        sftp.cd(remotePath);
        return sftp.ls(remotePath);
    }

}
