我正在通过 SO 找到解决方案,但我无法获得正确的解决方案。实际上,我从 SFTP 服务器复制文件到本地得到了以下程序:
public class SFTP_logic {
public static void main(String args[]) {
String Username = "abc";
String Host = "ftp.abc.com";
int port = 22;
String Password="abc123";
JSch jsch = new JSch();
Session session = null;
try {
session = jsch.getSession(Username, Host, port);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(Password);
session.connect();
System.out.println("connected..");
Channel channel = session.openChannel("sftp");
channel.connect();
// System.out.println("---------------------Connected to SFTP server.----------------------");
ChannelSftp sftpChannel = (ChannelSftp) channel;
sftpChannel.get("abc_20161031.txt.xyz", "localfile.txt");
sftpChannel.exit();
session.disconnect();
} catch (JSchException e) {
e.printStackTrace();
} catch (SftpException e) {
e.printStackTrace();
}
}
}
我的要求:- 我需要每 10 分钟轮询一次 SFTP 服务器的目录,是否有任何新文件,如果有,则必须将该文件复制到本地。
所以,我的问题是我想使用 JAVA 轮询 SFTP 服务器的目录。那我该怎么做呢?我找到了一个指向这一点的解决方案。但它包含很多类,而且太混乱了,因为我可以使用下面的程序对本地机器进行相同的轮询。
public class MonitorDirectory {
public static void main(String[] args) throws IOException,
InterruptedException {
Path faxFolder = Paths.get("C:\\Users\\Yash\\Documents");
WatchService watchService = FileSystems.getDefault().newWatchService();
faxFolder.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);
boolean valid = true;
do {
WatchKey watchKey = watchService.take();
for (WatchEvent event : watchKey.pollEvents()) {
WatchEvent.Kind kind = event.kind();
if (StandardWatchEventKinds.ENTRY_CREATE.equals(event.kind())) {
String fileName = event.context().toString();
System.out.println("File Created:" + fileName);
}
}
valid = watchKey.reset();
} while (valid);
}
}
那么,是否有任何代码适用于 SFTP 目录获取,如上述本地工作。