JAVA实现从一个FTP批量复制文件至另一个FTP,进行数据自动备份

从一个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 "数据全部已完成";
    }

如有疑问,可以随时联系我,以上代码绝对可以实现,本人亲测。

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值