连接到远程服务器并遍历指定目录下的所有文件。它会找到名称以error.2023-03-23
开头的文件,并将它们从服务器复制到本地计算机
需要用到依赖包:
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
代码如下
import java.io.*;
import java.util.*;
import com.jcraft.jsch.*;
public class CopyErrorFiles {
public static void main(String[] args) {
// 远程服务器的主机名或IP地址
String hostname = "your_server_hostname";
// 登录远程服务器的用户名
String username = "your_username";
// 登录远程服务器的密码
String password = "your_password";
// 远程文件的基本路径
String remoteBasePath = "/home/hadoop/cdp-rm/error/";
// 本地文件的基本路径
String localBasePath = "/path/to/local/files/";
// 要复制的文件名称前缀
String filePrefix = "error.2023-03-23";
try {
// 创建JSch对象
JSch jsch = new JSch();
// 创建会话对象并连接到远程服务器
Session session = jsch.getSession(username, hostname, 22);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
// 创建SFTP通道并连接到远程服务器
ChannelSftp channel = (ChannelSftp)session.openChannel("sftp");
channel.connect();
// 列出远程目录下所有文件
Vector<ChannelSftp.LsEntry> remoteFiles = channel.ls(remoteBasePath);
// 遍历所有匹配的文件并复制到本地计算机
for (ChannelSftp.LsEntry remoteFile : remoteFiles) {
if (!remoteFile.getAttrs().isDir() && remoteFile.getFilename().startsWith(filePrefix)) {
String remoteFilePath = remoteBasePath + remoteFile.getFilename();
String localFilePath = localBasePath + remoteFile.getFilename();
// 复制远程文件到本地计算机
channel.get(remoteFilePath, localFilePath);
System.out.println("Copied " + remoteFilePath + " to " + localFilePath);
}
}
// 断开SFTP通道和会话连接
channel.disconnect();
session.disconnect();
System.out.println("All files copied successfully.");
} catch (JSchException | SftpException e) {
e.printStackTrace();
}
}
}