一、背景

大型系统架构往往被分解为多个独立可运行的组件, 以满足性能、可靠性、可扩展性的需求。多个组件间的数据交互往往采用两种方式:小量数据通过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….” bin\ftpd.bat res\conf\ftpd-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();
    }
}

四、客户端测试代码

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();
        }
    }
}

FTP环境搭建及客户代码调用公共方法封装的更多相关文章

  1. SFTP环境搭建及客户代码调用公共方法封装

    一.背景 在开发应用软件的过程中,广泛使用FTP在各子系统间传送文本数据.但FTP存在安全问题,开放到外网存在安全漏洞,容易被攻击.替换方案是使用SFTP,SFTP提供更高的安全性,当然传输的效率也会 ...

  2. Angularjs调用公共方法与共享数据

    这个问题场景是在使用ionic开发页面的过程中发现,多个页面对应的多个controller如何去调用公共方法,比如给ionic引入了toast插件,如何将这个插件的调用变成公共方法或者设置成工具类,因 ...

  3. python web自动化测试框架搭建(功能&接口)——接口公共方法

    接口公共方法有:数据引擎.http引擎.Excel引擎 1.数据引擎:获取用例.结果检查.结果统计 # -*- coding:utf-8 -*- from XlsEngine import XlsEn ...

  4. [原创]LAMP+phpmyadmin+FTP环境搭建

    ***简单ftp服务器搭建: rpm –qa|grep vsftpd   //检查是否安装服务 yum –y install vsftpd-*   //安装服务 mkdir /var/ftp/uplo ...

  5. Angular中怎样创建service服务来实现组件之间调用公共方法

    Angular组件之间不能互相调用方法,但是可以通过创建服务来实现公共方法的调用. 实现 创建服务命令 ng g service 服务路径/服务名 比如这里在app/services目录下创建stor ...

  6. JS常用公共方法封装

    _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\||| : |||/ ...

  7. MPSOC之9——host、embeded间tftp、nfs、ftp环境搭建

    tftp 可传输单个文件,不能传文件夹 需要通过命令传输文件,略显复杂 ==一般调试kernel时,用uboot通过tftp方式启动,不用每次都烧写存储介质== nfs 在host linux(ubu ...

  8. Centos7 ftp环境搭建

    没玩过linux,折腾了半天的ftp,好不容易亲测通过了.不容易啊. 操作环境:vm虚拟机 centos7 首先:搞定网络问题:默认情况下使用ifconfig可以看到虚拟机下是无网络的.(注:虚拟机网 ...

  9. centos ftp服务器搭建 vsftpd 匿名访问配置方法 ftp 550 Failed to open file 错误处理

    vsftpd是linux下常用的ftp服务软件,配置起来其实不复杂,只是网上很多文章,配置后都无法成功.我使用它是用于局域网内部分享文件的,所以使用匿名的方式. ftp本身密码是明文传输的,如果需要安 ...

随机推荐

  1. 对html语义化的理解

    所有人都知道html即超文本标记语言或超文本链接标示语言,是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言. html标签中的大部分都是由"语义化"标签所担任 那么,它有 ...

  2. React设计思想

    熟悉一个新技术的关键是熟悉他的特色和理念 React框架本身和我们常用的JavaScript MVC框架,如:AngularJS,Backbone,Ember等,没有直接的可比性.在React的官方博 ...

  3. JAVAEE——BOS物流项目06:分页查询、分区导出Excel文件、定区添加、分页问题总结

    1 学习计划 1.分区组合条件分页查询 n 分区分页查询(没有过滤条件) n 分区分页查询(带有过滤条件) 2.分区导出 n 页面调整 n 使用POI将数据写到Excel文件 n 通过输出流进行文件下 ...

  4. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](十)

    前言 朋友们, 大家好,我还是Rector,写ASP.NET MVC 5系列文章[一步一步创建ASP.NET MVC5程序Repository+Autofac+Automapper+SqlSugar] ...

  5. 基础--Redis在Linux环境下的安装

    1. 安装redis服务 1.1 检查安装依赖程序 yum install gcc-c++yum install -y tclyum install wget 1.1.1 下载redis安装包 (或者 ...

  6. python中 字符 字典 列表之间的转换

    1 字典 转 字符 定义一个字典:dict = {'name': 'python', 'age': 7}字典转字符 可以使用str强制转换 如: str(dict) 此时dict的类型就是字符型了 2 ...

  7. Nginx反向代理实现Tomcat负载均衡

    这篇短文主要介绍Tomcat的集群和用Nginx反向代理实现Tomcat负载均衡. 1.首先需要对一些知识点进行扫盲(对自己进行扫盲,囧): 集群(Cluster) 简单来说就是用N台服务器构成一个松 ...

  8. React是什么,为什么要使用它?

    React是Facrbook内部的一个JavaScript类库,已于1年开源,可用于创建Web用户交互界面.它引入了一种新的方式来处理浏览器DOM.那些需要手动更新DOM.费力地记录每一个状态的日子一 ...

  9. 简述在javascript和jquery中cookie的使用

    html <body onload="cookieJar()"></body> javascript <script href="../st ...

  10. Disruptor3.0的实现细节

    本文旨在介绍Disruptor3.0的实现细节,首先从整体上描述了Disruptor3.0的核心类图,Disruptor3.0 DSL(领域专用语言)的实现类图,并以Disruptor官方列举的几大特 ...