shh连接远程服务器判断文件目录是否存在

package com.elco.util;

import com.jcraft.jsch.*;

/**
 * 判断文件是否存在(工具类)
 */
public class FileUtils {

    public static final String SFTP_PROTOCAL = "sftp";

    /**
     * 创建SFTP服务器连接session
     *
     * @param jsch     需要用到jsch-0.1.54.jar包
     * @param host     IP地址
     * @param username 用户名
     * @return session
     * @throws Exception
     */
    private static Session createSession(JSch jsch, String host, String username) throws Exception {
        int port = 0;
        Session session = null;
        if (port <= 0) {
            // 连接服务器,采用默认端口
            session = jsch.getSession(username, host);
        } else {
            // 采用指定的端口连接服务器
            session = jsch.getSession(username, host, port);
        }
        // 如果服务器连接不上,则抛出异常
        if (session == null) {
            throw new Exception(host + "session is null");
        }
        // 设置第一次登陆的时候提示,可选值:(ask | yes | no)
        session.setConfig("StrictHostKeyChecking", "no");
        // session.setConfig("kex", "diffie-hellman-group1-sha1");
        return session;
    }
    /**
     * 创建SFTP连接
     *
     * @param host     主机IP
     * @param username 主机登陆用户名
     * @param password 主机登陆密码
     * @return SFTP
     * @throws Exception
     */
    public static ChannelSftp connect(String host, String username, String password) throws Exception {
        Channel channel = null;
        ChannelSftp sftp = null;
        JSch jsch = new JSch();

        // 获取连接session
        Session session = createSession(jsch, host, username);
        // 设置登陆主机的密码
        session.setPassword(password);
        // 设置登陆超时时间
        session.connect(15000);
        System.out.println("Session connected to " + host + ".");
        try {
            // 创建SFTP通信通道
            channel = (Channel) session.openChannel(SFTP_PROTOCAL);
            channel.connect(1000);
            System.out.println("Channel created to " + host + ".");
            sftp = (ChannelSftp) channel;
        } catch (JSchException e) {
            System.out.println("exception when channel create.");
        }
        return sftp;
    }
    /**
     * 创建一个文件目录
     */
    public static void createDir(String createpath, ChannelSftp sftp) {
        try {
            if (isDirExist(createpath, sftp)) {
                sftp.cd(createpath);
                return;
            }
            String pathArry[] = createpath.split("/");
            StringBuffer filePath = new StringBuffer("/");
            for (String path : pathArry) {
                if (path.equals("")) {
                    continue;
                }
                filePath.append(path + "/");
                if (isDirExist(filePath.toString(), sftp)) {
                    sftp.cd(filePath.toString());
                } else {
                    // 建立目录
                    sftp.mkdir(filePath.toString());
                    // 进入并设置为当前目录
//                    sftp.cd(filePath.toString());
                }
            }
//            sftp.cd(createpath);
        } catch (SftpException e) {
            System.out.println("创建目录失败");
        }
    }

    /**
     * 判断目录是否存在
     */
    public static boolean isDirExist(String directory, ChannelSftp sftp) {
        boolean isDirExistFlag = false;
        try {
            SftpATTRS sftpATTRS = sftp.lstat(directory);
            isDirExistFlag = true;
            return sftpATTRS.isDir();
        } catch (Exception e) {
            if (e.getMessage().toLowerCase().equals("no such file")) {
                isDirExistFlag = false;
            }
        }
        return isDirExistFlag;
    }

    /**
     * 判断文件是否存在,不存在时,创建文件
     *
     * @param directory
     * @param host
     * @param username
     * @param password
     * @throws Exception
     */
    public static void isfile(String directory, String host, String username, String password) throws Exception {
        Channel channel = null;
        ChannelSftp sftp = null;
        JSch jsch = new JSch();

        // 获取连接session
        Session session = createSession(jsch, host, username);
        // 设置登陆主机的密码
        session.setPassword(password);
        // 设置登陆超时时间
        session.connect(15000);
        System.out.println("Session connected to " + host + ".");
        try {
            // 创建SFTP通信通道
            channel = (Channel) session.openChannel(SFTP_PROTOCAL);
            channel.connect(1000);
            System.out.println("Channel created to " + host + ".");
            sftp = (ChannelSftp) channel;
            createDir(directory, sftp);
        } catch (JSchException e) {
            System.out.println("exception when channel create.");
        }
        //关闭
        sftp.disconnect();
        channel.disconnect();
        session.disconnect();
        jsch = null;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值