我已经完成了对dest文件夹的逻辑复制,然后在复制成功后删除源文件夹。这是我的代码,
File[] directories = new File("E:\shareFolder")
.listFiles(file -> file.isDirectory() && file.getName().matches("[0-9]{6}"));
for (File getDirectory : directories) {
try {
FileUtils.copyDirectory(new File(getDirectory.getAbsolutePath()),new File("F:\localFolder"));
// here i will check both file size are same if same
FileUtils.forceDelete(new File(getDirectory.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}
但是现在要求改为远程访问源文件夹(E://shareFolder to 45.xx.88.xxshareFolder)。
如何通过访问远程文件夹实现所有条件?
这与使用ssh连接到主机是一样的,因为这是在幕后必须进行的操作。
- 连接远程服务器
- 删除文件
如注释中所建议的,您可以使用JSch库maven文档。
JSch ssh = new JSch();
Session session = ...
// create and configure session as needed, then connect
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftp = (ChannelSftp) channel;
String pathToFile = ...
sftp.rm(pathToFile);
channel.disconnect();
session.disconnect();
编辑
要只删除与正则表达式匹配的某些文件,如注释中所要求的,您必须首先获得与该正则表达式匹配的文件名称,然后遍历它们。这个例子已经在StackOverflow上提供了。
让它适应你的情况
Vector ls = sftp.ls(path);
Pattern pattern = Pattern.compile("[0-9]{6}");
for (Object entry : ls) {
ChannelSftp.LsEntry e = (ChannelSftp.LsEntry) entry;
Matcher m = pattern.matcher(e.getFilename());
if (m.matches()) {
sftp.rm(e.getFilename());
}
}