专栏首页前端全栈开发者Java I/O FTP同步代码及FileZilla Server设置

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

假设现在有两台机器,一个是你本地开发的机器,一台是服务器,而你本地又有两个应用,需要从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就没法写入文件了

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

好了,就弄完了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用JXL组件导入Excel文件数据到数据库

    三、上传(本人使用Struts2+iBatis+Spring框架,上传部分自然也是Struts2方式上传)

    Dunizb
  • 浏览器的线程和进程

    多线程可以并行处理任务,但是线程是不能单独存在的,它是由进程来启动和管理的 一个进程就是一个程序的运行实例。详细解释就是,启动一个程序的时候,操作系统会为该程...

    Dunizb
  • 测量JavaScript函数的性能的简单方法及与其他方式对比

    测量执行一个函数所需的时间总是一个很好的办法,证明某些实现比另一个实现的性能更好。这也是一个很好的方法,可以确保性能没有在某些改变后受到影响,也可以追踪瓶颈。

    Dunizb
  • Tungsten Fabric+K8s轻松上手丨通过Kubernetes网络策略进行应用程序微分段

    本文所有相关链接https://tungstenfabric.org.cn/assets/uploads/files/tf-ceg-case4.pdf

    Tungsten Fabric
  • 如何快速优雅的编写一个脚本程序?用这个!

    在日常工作当中,我们会不时借助脚本程序来处理一些重复性工作,以帮助我们提升工作效率。

    GitHubDaily
  • OOP六大原则

    最近面试字节跳动的时候,被问起面向对象编程的六大原则,想来已经忘光了,重新复习整理一下。

    用户7257200
  • Linux用户管理

    此时可以看到,shadow文件中,第二个存密码的位置是一个!,此时新建的账户还没有密码,当然也可以看到home目录下没有mianhk1的文件夹,此时需要先改密...

    小二三不乌
  • 后端技术杂谈3:Lucene基础原理与实践

    本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看

    Java技术江湖
  • 想做产品经理,先从写一篇PRD开始吧

    一、什么是PRD? PRD为Product Requirement Document的简称,其中文翻译为:产品需求文档。该文档是产品项目由“概念化”阶段进入到“...

    BestSDK
  • 鹅厂还你钢铁侠,瞬加地球复活字段!

    点击上方蓝字每天学习数据库 复联4在中国全球首映圆了无数漫威迷的梦,据说不少歪果仁飞十几小时来中国,只为提前一睹Avengers的华丽谢幕。可能中文字幕确实看...

    腾讯云数据库 TencentDB

扫码关注云+社区

领取腾讯云代金券