每隔1分钟(做成配置),sftp连接南京公司服务器指定的目录(做成配置),同时sftp连接江苏省调服务器指定的目录(做成配置)。南京公司服务器作为基准,比较江苏省调服务器上缺失的文件夹和文件,找到缺失文件夹和文件后,上传到江苏省调的服务器。用jdk8的idea编程实现,附加注释
时间: 2024-05-30 18:15:14 浏览: 21
ChitGPT:
好的,我已经记录下来了。为了更好地理解您的要求,我们先来简单介绍一下SFTP。SFTP 是 SSH File Transfer Protocol 的缩写,是一种传输文件的协议,通常用于安全地从一个服务器传输文件到另一个服务器,并且比 FTP 更加安全。您的要求是每隔 1 分钟连接南京公司和江苏省调服务器,比较缺失的文件和文件夹并将其上传到江苏省调的服务器,以jdk8的idea编程实现。
SFTP 连接及上传功能可以使用 JSch 这个 Java 类库实现,大致的流程如下:
1. 引入 JSch 依赖:
<!-- https://mvnrepository.com/artifact/com.jcraft/jsch -->
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
2. 使用 JSch 建立 SFTP 连接:
// 登录南京公司服务器的 SFTP
JSch jSch = new JSch();
Session session = jSch.getSession(username, server, port);
session.setPassword(password);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
channelSftp.connect();
// 登录江苏省调服务器的 SFTP
JSch jSch2 = new JSch();
Session session2 = jSch2.getSession(username2, server2, port2);
session2.setPassword(password2);
Properties config2 = new Properties();
config2.put("StrictHostKeyChecking", "no");
session2.setConfig(config2);
session2.connect();
ChannelSftp channelSftp2 = (ChannelSftp) session2.openChannel("sftp");
channelSftp2.connect();
3. 使用 JSch 比较文件及文件夹并上传
// 比较南京公司和江苏省调服务器的文件
Vector<ChannelSftp.LsEntry> list1 = channelSftp.ls(remotePath);
Vector<ChannelSftp.LsEntry> list2 = channelSftp2.ls(remotePath2);
for (ChannelSftp.LsEntry entry : list1) {
if (entry.getAttrs().isDir()) {
if (list2.stream().noneMatch(e -> e.getFilename().equals(entry.getFilename()))) {
// 在江苏省调服务器上创建缺失的文件夹
channelSftp2.mkdir(remotePath2 + "/" + entry.getFilename());
}
} else {
if (list2.stream().noneMatch(e -> e.getFilename().equals(entry.getFilename()))) {
// 上传缺失的文件到江苏省调服务器
channelSftp.put(remotePath + "/" + entry.getFilename(), remotePath2 + "/" + entry.getFilename());
}
}
}
4. 关闭连接
channelSftp.disconnect();
session.disconnect();
channelSftp2.disconnect();
session2.disconnect();
以上就是一个大致的实现过程,您可以根据自己的需要进行修改和完善。需要注意的是,此处省略了一些异常处理和细节部分,实际开发中请一定要注意代码的健壮性和安全性。
希望能够帮助到您,如果您有其他问题,请随时问我。