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

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

你可能感兴趣的:(技巧,FTP批量复制文件)