• FTP环境搭建及客户代码调用公共方法封装


    一、背景

    大型系统架构往往被分解为多个独立可运行的组件, 以满足性能、可靠性、可扩展性的需求。多个组件间的数据交互往往采用两种方式:小量数据通过Sock函数、RMI、WebService等接口方式传递;大量采用文件方式传递。
    采用文件传递数据有两种方式:通过Windows的NFS系统,文件共享。采用FTP/SFTP做文件上传、下载。本文讲解采用FTP服务传递文件时,FTP服务器环境搭建及公共代码组件。
    

    二、FTP Server环境搭建

    2.1 下载开源组件Apache Server 1.0.6版本

    到官方网站下载http://mina.apache.org/ftpserver-project

    2.2 在users.properties配置文件添加用户名和密码

    2.3 在ftpd-typical.xml设置端口,密码是否加密(本配置文件清除密码加密)

    2.4 运行FTP Server

    命令行执行:start “apache ftp server….” binftpd.bat resconfftpd-typical.xml

    三、FTP客户端访问公共组件

    3.1 添加commons-net-3.3.jar包到Eclipse.

    3.2 公共基础类

    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPReply;
    
    public class FTPUtility 
    {
        private String ftpIP = "";
        private int ftpPort = 0;
        private String userName = "";
        private String passWord = "";
    
        FTPClient client = null;
    
        /**
         * 构造函数,初始化连接FTP服务器的参数。
         * @param ftpIP 服务器IP地址
         * @param ftpPort 服务器端口
         * @param userName 登陆用户名
         * @param passWord 登陆密码
         */
        public FTPUtility(String ftpIP, int ftpPort, String userName, String passWord)
        {
            this.ftpIP = ftpIP;
            this.ftpPort = ftpPort;
            this.userName = userName;
            this.passWord = passWord;
        }
    
        /**
         * 连接FTP服务器。
         * @return true: 连接成功; false:连接失败
         */
        public boolean connet()
        {
            // 1、连接FTP服务器
            client = new FTPClient();
            try 
            {
                client.connect(ftpIP, ftpPort);
                client.login(userName, passWord);
    
                // 文件按二进制传输,按ASCII码传输EXCEL文件会被损坏。
                client.setFileType(FTPClient.BINARY_FILE_TYPE);
            } 
            catch (SocketException e) 
            {
                e.printStackTrace();
            } 
            catch (IOException e) 
            {
                e.printStackTrace();
            }
    
            // 2、检验返回码,是否连接成功。
            int replyCode = client.getReplyCode();
            if (!FTPReply.isPositiveCompletion(replyCode))
            {
                try 
                {
                    client.disconnect();
                } 
                catch (IOException e)
                {
                    e.printStackTrace();    
                }
    
                System.err.println("FTP server refused connection.");
                return false;
            }
    
            return true;
        }
    
        /**
         * 上传文件到FTP服务器
         * @param localFilePath 待上传的本地文件完整路径
         * @param ftpFileName 上传后保存到FTP服务器的名称(一般和本地文件名一致)
         * @throws IOException IO异常
         */
        public void upLoadFile(String localFilePath, String ftpFileName) throws IOException
        {
            FileInputStream localIn = new FileInputStream(localFilePath);
            client.storeFile(ftpFileName, localIn);
            localIn.close();
        }
    
        /**
         * 从FTP服务器下载文件到本地。
         * @param ftpFileName 所下载文件在FTP服务器上的名称
         * @param localFilePath 下载后文件保存的完整路径(文件名一般和FTP上保存的文件一致)
         * @throws IOException IO异常
         */
        public void downLoadFile(String ftpFileName, String localFilePath) throws IOException
        {
            FileOutputStream localOut = new FileOutputStream(localFilePath);
            client.retrieveFile(ftpFileName, localOut);
            localOut.close();
        }
    
        /**
         * 关闭FTP连接
         * @throws IOException
         */
        public void disconnet() throws IOException
        {
            client.logout();
        }
    }
    • 1

    四、客户端测试代码

    public class TestMain 
    {
        public static void main(String[] args) 
        {
            FTPUtility ftp = new FTPUtility("10.70.60.60", 2121, "admin", "admin");
            if(!ftp.connet())
            {
                return;
            }
    
            try 
            {
                ftp.upLoadFile("d:/temp/IBMS_NE_T.txt", "IBMS_NE_T.txt");
                ftp.upLoadFile("d:/temp/2保修合同4.xlsx", "2保修合同4.xlsx");
                ftp.downLoadFile("IBMS_NE_T.txt", "d:/temp/IBMS_NE_T_new.txt");
                ftp.downLoadFile("2保修合同4.xlsx", "d:/temp/2保修合同4_new.xlsx");
                ftp.disconnet();
            } 
            catch (IOException e) 
            {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    博弈最高位POJ 1704(Georgia and BobNim博弈)
    图片优化ios学习之真机测试 copy图片错误解决方案
    输入左移校草计划(Nim)
    类型函数C语言void关键字
    图层设置GDAL/OGR创建DXF文件中多图层的方法
    浏览器下载Firefox os 模拟器安装教程步骤详解
    工程图标ios学习之给程序设置logo
    实例收藏Android开发环境搭建和Android开发基础知识汇总值得收藏
    乱码插入mac mysql汉字乱码问题解决
    菜菜从零学习WCF一(WCF概述)
  • 原文地址:https://www.cnblogs.com/telwanggs/p/7448519.html
Copyright © 2020-2023  润新知