从一个FTP批量复制文件至另一个FTP,再加一个定时任务就可以达到数据自动备份的效果。
首先要定义FTPOne的IP,端口,用户名,密码 以及FTPOne的路径
列如:private static String ftphost="192.0.0.1";
再定义FTPTwo的IP,端口,用户名,密码 以及FTPTwo的路径
下面就是具体的代码实现
//从一个FTP批量复制文件至另一个FTP
public static String readConfigfileForFTP() throws SocketException,IOException {
FTPClient ftpOne = new FTPClient();
FTPClient ftpTwo = new FTPClient();
ftpOne.connect(ftphost, ftpport);
//连接FTPOne
boolean isloginOne = ftpOne.login(ftpusername, ftppassword);
if (!FTPReply.isPositiveCompletion(ftpOne.getReplyCode())) {
logger.info("连接失败,用户名或密码错误");
} else {
logger.info("FTP连接成功");
}
ftpTwo.connect(ftphostbf, ftpportbf);
//连接FTPTwo
boolean isloginTwo = ftpTwo.login(ftpusernamebf, ftppasswordbf);
if (!FTPReply.isPositiveCompletion(ftpOne.getReplyCode())) {
logger.info("连接失败,用户名或密码错误");
} else {
logger.info("备份FTP连接成功");
}
if (isloginOne && isloginTwo) {
ftpOne.enterLocalPassiveMode();
logger.info("获取ftpOne路径" + ftpath + "文件");
// 获取ftpOne目录下的文件
FTPFile[] ftp = ftpOne.listFiles(ftpath);
for (FTPFile file : ftp) {
String st = new String(file.getName().getBytes(), "UTF-8");
logger.info("开始备份"+st+"文书");
if (st.endsWith("zip")) {
logger.info(ftpname + "开始时间");
ftpTwo.setRemoteVerificationEnabled(false);
// 获取ftpTwo输出流
OutputStream is = ftpTwo.storeFileStream(ftpTwo.printWorkingDirectory()+ localFile+ "/"+ file.getName());
if (is == null) {
logger.error("目标文件不存在");
}
ftpOne.changeWorkingDirectory(ftpath);
ftpOne.setFileType(FTP.BINARY_FILE_TYPE);
// 通过流把FTPOne复制到FTPTwo
ftpOne.retrieveFile(file.getName(), is);
logger.info(st + "备份完成");
is.close();
// 检查返回值是否成功
ftpTwo.completePendingCommand();
logger.info(ftpname + "结束时间");
}
}
}
ftpOne.logout();
if (ftpOne.isConnected()) {
ftpOne.disconnect();
}
if (ftpTwo.isConnected()) {
ftpTwo.disconnect();
} else {
logger.error("ftp路径错误");
}
return "数据全部已完成";
}
如有疑问,可以随时联系我,以上代码绝对可以实现,本人亲测。