Java远程链接服务器批量校验文件是否存在源码

程序介绍

要在Java中远程SSH登录服务器并检测文件是否存在于指定路径中,你可以使用JSch库来实现。下面是两个java示例程序都可以满足需求,一个是通过SFTP的方式一个是远程执行shell命令的方式进行检测,可以使用JSch库远程登录服务器,并在指定路径中批量检测文件是否存在,首先,确保已经将JSch库添加到项目的类路径中。

通过SFTP方式

import com.jcraft.jsch.*;

public class RemoteFileChecker {
    public static void main(String[] args) {
        String host = "服务器IP";
        int port = 22;
        String username = "用户名";
        String password = "密码";
        String remotePath = "/path/to/files/";
        String[] fileNames = {"file1.txt", "file2.txt", "file3.txt"};
        JSch jsch = new JSch();
        try {
            Session session = jsch.getSession(username, host, port);
            session.setPassword(password);
            session.setConfig("StrictHostKeyChecking", "no");
            session.connect();
            Channel channel = session.openChannel("sftp");
            channel.connect();
            ChannelSftp sftpChannel = (ChannelSftp) channel;
            for (String fileName : fileNames) {
                String filePath = remotePath + fileName;
                try {
                    sftpChannel.stat(filePath);
                    System.out.println(fileName + " exists.");
                } catch (SftpException e) {
                    System.out.println(fileName + " does not exist.");
                }
            }
            sftpChannel.disconnect();
            session.disconnect();
        } catch (JSchException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们首先定义了远程服务器的主机名(IP地址)、端口、用户名、密码,以及要检查的文件所在的远程路径。然后,我们遍历每个文件名,在远程服务器上构建文件的完整路径。我们使用JSch库来建立SSH会话并连接到远程服务器。然后,我们打开一个SFTP通道,并使用stat方法尝试获取文件的属性。如果获取成功,则表示文件存在于指定路径中;否则,文件不存在。

请确保替换host、port、username、password为你的服务器信息,并将remotePath变量替换为你要检测的远程路径,将fileNames数组替换为你要检测的文件名列表。

需要注意的是,该示例程序仅适用于SFTP协议,如果你需要使用其他协议(例如SSH执行命令),请参考JSch库的文档和示例代码进行相应的调整。

通过远程shell方式

import com.jcraft.jsch.*;

public class SSHExample {

    public static void main(String[] args) {
        String host = "your_remote_host";
        String user = "your_username";
        String password = "your_password";
        String remoteDirectory = "/path/to/remote/directory";
        String[] fileNames = {"file1.txt", "file2.txt", "file3.txt"};

        try {
            JSch jsch = new JSch();
            Session session = jsch.getSession(user, host, 22);
            session.setPassword(password);

            // Avoid asking for key confirmation
            java.util.Properties config = new java.util.Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);

            session.connect();
            System.out.println("Connected");

            ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
            channelExec.setCommand("cd " + remoteDirectory + " && ls -1 " + String.join(" ", fileNames));
            channelExec.setErrStream(System.err);

            InputStream in = channelExec.getInputStream();
            channelExec.connect();

            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line.trim() + " exists");
            }

            channelExec.disconnect();
            session.disconnect();
        } catch (JSchException | IOException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,host、user、password 分别表示远程服务器的主机地址、登录用户名和登录密码。remoteDirectory 表示远程路径,fileNames 数组存储了需要检查的文件列表。通过在 SSH 连接的基础上使用 ChannelExec 执行命令,首先进入指定目录,然后使用 ls 命令批量检查文件是否存在。

请注意,上述代码前提是使用 SSH 协议连接到远程服务器,并执行基于 Unix/Linux 系统的命令。在使用 JSch 连接 SSH 服务器之前,确保已经添加了 JSch 库到你的项目中。同时,根据实际情况修改远程服务器的连接信息和路径信息。

© 版权声明
THE END
喜欢就支持一下吧
点赞7赞赏 分享