前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java I/O FTP同步代码及FileZilla Server设置

Java I/O FTP同步代码及FileZilla Server设置

作者头像
张张
发布2019-12-26 15:40:35
1.7K0
发布2019-12-26 15:40:35
举报

假设现在有两台机器,一个是你本地开发的机器,一台是服务器,而你本地又有两个应用,需要从shopManage同步到fxShop,如下图.

在2的时间节点还要同时同步到右边的服务器上,二本地两个应用之间使用I\O拷贝。

新建一个工具类如下: 第一个方法用IO流方式进行本地拷贝 第二个方法才是FTP方式

public class FileSynchronousUtil {
    /**
     * 文件本机拷贝
     * @param localPath 源路径
     * @param yinPath 目标路径
     * @return
     */
    public static boolean copy(String localPath, String yinPath) {
        try {
            int bytesum = 0; 
            int byteread = 0;
            File oldfile = new File(localPath); 
            if (oldfile.exists()) { // 文件存在时 
                InputStream inStream = new FileInputStream(localPath); 
                String wenjianName = localPath.substring(localPath.lastIndexOf("\\"));
                System.out.println(wenjianName); 
                System.out.println(yinPath + wenjianName);
                // 读入原文件
                FileOutputStream fs = new FileOutputStream(yinPath + wenjianName);
                byte[] buffer = new byte[1444];
                while ((byteread = inStream.read(buffer)) != -1) {
                    bytesum += byteread; // 字节数 文件大小
                    System.out.println(bytesum);
                    fs.write(buffer, 0, byteread);
                }
                inStream.close();
           }
        } catch (Exception e) {
            System.out.println("复制单个文件操作出错");
            e.printStackTrace();
        }
        return true;
    }
 
    /**
     * 使用FTP方式同步文件到远程服务器
     * @param localPath 本地路径
     * @param FtpPath 远程FTP服务器路径
     * @param FtpPathName 远程FTP服务器登录名
     * @param FtpPathPass 远程FTP服务器登录密码
     * @param FtpIp 远程FTP服务器IP地址
     */
    public static void copy(String localPath, String FtpPath, String FtpPathName,
        String FtpPathPass, String FtpIp) {
        //链接FTP
        FTPClient ftpClient = new FTPClient();
        FileInputStream fis = null;
        int reply;
        try {
            ftpClient.connect(FtpIp, 21);
            ftpClient.login(FtpPathName, FtpPathPass);
            reply = ftpClient.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftpClient.disconnect();
            }
            fis = new FileInputStream(localPath);
            ftpClient.setBufferSize(10240000);
            String wenjianName = localPath.substring(localPath.lastIndexOf("\\")+1); 
            ftpClient.makeDirectory(FtpPath);
            ftpClient.changeWorkingDirectory(FtpPath);
            ftpClient.setControlEncoding("GBK");
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            //被动模式传输
            ftpClient.enterLocalPassiveMode();
//          ftpClient.storeFile(new String(wenjianName.getBytes("GBK"), "iso-8859-1") , fis);
            ftpClient.storeFile(wenjianName, fis);
            fis.close();
        /*  String finalRemoteFileName = FtpPath.replaceAll(".ing", "");
            ftpClient.rename(FtpPath, finalRemoteFileName);*/
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftpClient.isConnected()) {
                try {
                    ftpClient.disconnect();
                } catch (IOException ioe) {
                    ioe.getMessage();
                }
            }
        }
    }
}

同时准备一个ftp.propertis文件,主要参数都在这里配置,需要读取这个文件:

#本地IP
localIp=127.0.0.1
##本地目标地址
local_targetPath=D\:\\tomcat\\apache-tomcat-6.0.16\\webapps\\fxShop
##远程目标地址
remote_targetPath=
#远程FTP服务器IP
remote_ftpIp=127.0.0.1
#远程FTP服务器登录名
remote_ftpServerName=test
#远程FTP服务器登录密码
remote_ftpServerPassWord=123

写一个主调(Main)方法,就可以进行调用测试了:

public static void main(String[] args) {
        //读取配置文件,
        InputStream stream = null;
        try {
            //stream = new BufferedInputStream(new FileInputStream(new File("src/common.properties")));
            stream = NowFirst.class.getResourceAsStream("/common.properties");
            System.err.println(stream);
        } catch (Exception e) {
            System.out.println("配置文件未找到!");
        }
         Properties p = new Properties();
         try {
            p.load(stream);
        } catch (IOException e) {
            System.out.println("文件未加载");
        }
        String localPath=p.getProperty("localPath");
        String targetPath=p.getProperty("targetPath");
        String FtpOnePath=p.getProperty("FtpOnePath");
        System.err.println(FtpOnePath);
        String FtpOnePathName=p.getProperty("FtpOnePathName");
        String FtpOnePathPass=p.getProperty("FtpOnePathPass");
        String FtpTwoPath=p.getProperty("FtpTwoPath");
        String FtpTwoPathName=p.getProperty("FtpTwoPathName");
        String FtpTwoPathPass=p.getProperty("FtpTwoPathPass");
        String FtpOneIp=p.getProperty("FtpOneIp");
        String FtpTwoIp=p.getProperty("FtpTwoIp");
        serviceDao dao=new serviceDao();
        //同步本地
        //dao.copy(localPath, targetPath);
        //同步Ftp
        //第一台
        dao.copy(localPath, FtpOnePath, FtpOnePathName, FtpOnePathPass,FtpOneIp);
        //第二台
        //dao.copy(localPath, FtpTwoPath, FtpTwoPathName, FtpTwoPathPass,FtpTwoIp);
}

当然了,是用FTP同步需要FTP服务器支持,你要建立一个FTP服务,比较方便的是使用FileZilla Server

FileZilla Server设置: 首先需要新建一个用户:

直接填一个用户名就好了:

然后账号设置这里,你可以给给他分配一个密码,也可以不写,去掉勾就好了:

接下来就是制定一个共享目录,这个目录就是用来同步到的目标地址:

这里假设建在F盘的FTPTest目录下。 注意:这里的Read、Write必须勾选,否则FTP就没法写入文件了

还要设置这个文件夹为系统共享的,右键-属性-共享这个文件夹:

好了,就弄完了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档