Java -从远程复制到本地并删除源文件夹



我已经完成了对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连接到主机是一样的,因为这是在幕后必须进行的操作。

  1. 连接远程服务器
  2. 删除文件

如注释中所建议的,您可以使用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());
}
}

相关内容

  • 没有找到相关文章

最新更新