服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|

服务器之家 - 编程语言 - JAVA教程 - EDI中JAVA通过FTP工具实现文件上传下载实例

EDI中JAVA通过FTP工具实现文件上传下载实例

2020-07-01 11:51Jay_1989 JAVA教程

这篇文章主要介绍了EDI中JAVA通过FTP工具实现文件上传下载实例,具有一定的参考价值,有需要的可以了解一下。

最近接手一个EDI项目,收获颇多。其实我在第一家公司是接触过EDI的,当初我们用EDI主要实现了订单数据传输,客户向我们下达采购订单,通过VPN及FTP工具将采购订单以约定的报文形式放到指定的文件服务器中,然后我们EDI系统会定时去文件服务器中获取报文,最后解析并生成我们的销售订单。这些年过去了,我仍记着当初用的最多的是EDI850、EDI855。

 一、首先介绍一下EDI的概念

Electronic data interchange,电子数据交换。

EDI其实就是把原来纸质的订单/发货通知等业务单据,从传真/快递等传统方式,变成在线的电子数据方式进行交互,从而提高业务效率。同时,通过一些EDI软件的实施配置,往往可以直接从企业的业务系统生成出相应的单据数据,并自动传送至客户/供应商处,实现Application to Application的效果,避免纸质单据中人为造成的错误(如数据错误等)。所以IT系统完善的大公司更喜欢EDI,因为EDI对于业务人员是透明的,业务人员操作自己日常的业务系统就可以了。

EDI依赖于几个部分:

1、EDI传输途径,一般EDI通过AS2协议、FTP/S等进行直联,也可以通过第三方的VAN(增值网)服务商中转(这个和我们使用电子邮件的模式相同)。因为涉及到业务信息,传输安全要求会比较高;

2、EDI标准,即业务数据的组织形式,目前最常用的美标的ANSI X12和联合国和欧盟的EDIFact,当然还有很多其他标准,只要EDI双方遵循同一标准,就可以很好的实现EDI交互;

3、两端的EDI软件(环境),一般最好的实现方式是由EDI软件自动收发EDI报文(数据文件),并自动集成到企业业务系统中。

其中传输途径中,我们采用的是FTP进行文件传输的,这里我主要介绍一下Java是如何通过FTP工具进行文件的上传下载,这里我们的FTP服务器是Linux操作系统。

二、JAVA架包引用


EDI中JAVA通过FTP工具实现文件上传下载实例

其中“commons-net-1.4.1.jar”、“jakarta-oro-2.0.8.jar”点击链接均可直接下载,并且确保是可以用的,大家可以放心下载。

三、文件路径
客户端需要上传的文件夹路径"E:\edi\edi850",默认是将该文件夹下所有文件上传

EDI中JAVA通过FTP工具实现文件上传下载实例


FTP服务器端上传路径为“/home/test/edi850”,如果上传为路径则FTP服务器会建立对应同样的路径

EDI中JAVA通过FTP工具实现文件上传下载实例

 

四、JAVA代码
FTP类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.pcmall;
 
public class Ftp {
  private String ipAddr;// ip地址
  private Integer port;// 端口号
  private String userName;// 用户名
  private String pwd;// 密码
  private String path;// 路径
 
  public String getIpAddr() {
    return ipAddr;
  }
 
  public void setIpAddr(String ipAddr) {
    this.ipAddr = ipAddr;
  }
 
  public Integer getPort() {
    return port;
  }
 
  public void setPort(Integer port) {
    this.port = port;
  }
 
  public String getUserName() {
    return userName;
  }
 
  public void setUserName(String userName) {
    this.userName = userName;
  }
 
  public String getPwd() {
    return pwd;
  }
 
  public void setPwd(String pwd) {
    this.pwd = pwd;
  }
 
  public String getPath() {
    return path;
  }
 
  public void setPath(String path) {
    this.path = path;
  }
}

FtpUtil类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
package com.pcmall;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
 
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;
 
public class FtpUtil {
 
  private static Logger logger = Logger.getLogger(FtpUtil.class);
 
  private static FTPClient ftp;
 
  /**
   * 获取ftp连接
   *
   * @param f
   * @return
   * @throws Exception
   */
  public static boolean connectFtp(Ftp f) throws Exception {
    ftp = new FTPClient();
    boolean flag = false;
    int reply;
    if (f.getPort() == null) {
      ftp.connect(f.getIpAddr(), 21);
    } else {
      ftp.connect(f.getIpAddr(), f.getPort());
    }
    ftp.login(f.getUserName(), f.getPwd());
    ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
    reply = ftp.getReplyCode();
    if (!FTPReply.isPositiveCompletion(reply)) {
      ftp.disconnect();
      return flag;
    }
    ftp.changeWorkingDirectory(f.getPath());
    flag = true;
    return flag;
  }
 
  /**
   * 关闭ftp连接
   */
  public static void closeFtp() {
    if (ftp != null && ftp.isConnected()) {
      try {
        ftp.logout();
        ftp.disconnect();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
 
  /**
   * ftp上传文件
   *
   * @param f
   * @throws Exception
   */
  public static void upload(File f) throws Exception {
    if (f.isDirectory()) {
      ftp.makeDirectory(f.getName());
      ftp.changeWorkingDirectory(f.getName());
      String[] files = f.list();
      for (String fstr : files) {
        File file1 = new File(f.getPath() + "/" + fstr);
        if (file1.isDirectory()) {
          upload(file1);
          ftp.changeToParentDirectory();
        } else {
          File file2 = new File(f.getPath() + "/" + fstr);
          FileInputStream input = new FileInputStream(file2);
          ftp.storeFile(file2.getName(), input);
          input.close();
        }
      }
    } else {
      File file2 = new File(f.getPath());
      FileInputStream input = new FileInputStream(file2);
      ftp.storeFile(file2.getName(), input);
      input.close();
    }
  }
 
  /**
   * 下载链接配置
   *
   * @param f
   * @param localBaseDir
   *      本地目录
   * @param remoteBaseDir
   *      远程目录
   * @throws Exception
   */
  public static void startDown(Ftp f, String localBaseDir,
      String remoteBaseDir) throws Exception {
    if (FtpUtil.connectFtp(f)) {
 
      try {
        FTPFile[] files = null;
        boolean changedir = ftp.changeWorkingDirectory(remoteBaseDir);
        if (changedir) {
          ftp.setControlEncoding("GBK");
          files = ftp.listFiles();
          for (int i = 0; i < files.length; i++) {
            try {
              downloadFile(files[i], localBaseDir, remoteBaseDir);
            } catch (Exception e) {
              logger.error(e);
              logger.error("<" + files[i].getName() + ">下载失败");
            }
          }
        }
      } catch (Exception e) {
        logger.error(e);
        logger.error("下载过程中出现异常");
      }
    } else {
      logger.error("链接失败!");
    }
 
  }
 
  /**
   *
   * 下载FTP文件 当你需要下载FTP文件的时候,调用此方法 根据<b>获取的文件名,本地地址,远程地址</b>进行下载
   *
   * @param ftpFile
   * @param relativeLocalPath
   * @param relativeRemotePath
   */
  private static void downloadFile(FTPFile ftpFile, String relativeLocalPath,
      String relativeRemotePath) {
    if (ftpFile.isFile()) {
      if (ftpFile.getName().indexOf("?") == -1) {
        OutputStream outputStream = null;
        try {
          File locaFile = new File(relativeLocalPath
              + ftpFile.getName());
          // 判断文件是否存在,存在则返回
          if (locaFile.exists()) {
            return;
          } else {
            outputStream = new FileOutputStream(relativeLocalPath
                + ftpFile.getName());
            ftp.retrieveFile(ftpFile.getName(), outputStream);
            outputStream.flush();
            outputStream.close();
          }
        } catch (Exception e) {
          logger.error(e);
        } finally {
          try {
            if (outputStream != null) {
              outputStream.close();
            }
          } catch (IOException e) {
            logger.error("输出文件流异常");
          }
        }
      }
    } else {
      String newlocalRelatePath = relativeLocalPath + ftpFile.getName();
      String newRemote = new String(relativeRemotePath
          + ftpFile.getName().toString());
      File fl = new File(newlocalRelatePath);
      if (!fl.exists()) {
        fl.mkdirs();
      }
      try {
        newlocalRelatePath = newlocalRelatePath + '/';
        newRemote = newRemote + "/";
        String currentWorkDir = ftpFile.getName().toString();
        boolean changedir = ftp.changeWorkingDirectory(currentWorkDir);
        if (changedir) {
          FTPFile[] files = null;
          files = ftp.listFiles();
          for (int i = 0; i < files.length; i++) {
            downloadFile(files[i], newlocalRelatePath, newRemote);
          }
        }
        if (changedir) {
          ftp.changeToParentDirectory();
        }
      } catch (Exception e) {
        logger.error(e);
      }
    }
  }
 
  public static void main(String[] args) throws Exception {
    Ftp ftp = new Ftp();
    ftp.setIpAddr("192.168.16.128");
    ftp.setUserName("test");
    ftp.setPwd("123456");
    FtpUtil.connectFtp(ftp);
    File file = new File("E:/edi/edi850/");//如果是路径则将上传该路径下所有文件,如果是文件则上传该文件
    FtpUtil.upload(file);// 把文件上传在ftp上
    FtpUtil.startDown(ftp, "E:/FTPTEST/", "/home/test/edi850");// 下载ftp文件测试,第二个参数为客户端下载地址,第三个参数为文件服务器下载路径
    System.out.println("ok");
 
  }
 
}

上传成功后,FTP文件服务器文件情况如下

EDI中JAVA通过FTP工具实现文件上传下载实例

下载成功后,客户端文件如下

EDI中JAVA通过FTP工具实现文件上传下载实例


打开后,文件内容如下

EDI中JAVA通过FTP工具实现文件上传下载实例


好了,EDI中如何通过FTP工具进行文件的上传与下载先介绍到这里,以上代码本人均亲自测试,可以运行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

延伸 · 阅读

精彩推荐
  • JAVA教程java继承中的构造方法实例解析

    java继承中的构造方法实例解析

    这篇文章主要介绍了java继承中的构造方法实例解析,针对继承中的构造方法的特点进行了实例分析,需要的朋友可以参考下 ...

    shichen20144922019-12-01
  • JAVA教程java动态代理详解

    java动态代理详解

    本文章要用很土的语言描述Java动态代理,力求更易被理解。Java是JDK5中新加的机制,大家都知道Spring是用Java的动态代理实现的,那这个动态代理是什么东东...

    java教程网4262019-11-11
  • JAVA教程Java 高并发八:NIO和AIO详解

    Java 高并发八:NIO和AIO详解

    本文主要介绍Java 高并发NIO和AIO 的知识,这里整理了详细的资料,并详细介绍了 1. 什么是NIO 2. Buffer 3. Channel 4. 网络编程 5. AIO的知识,有需要的小伙伴可以...

    Hosee4352020-06-15
  • JAVA教程Java解析xml的四种方法汇总

    Java解析xml的四种方法汇总

    XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。java中基本的解析方式有四种,DOM解析、sax解析、JDOM解析和DOM4J解析,下面我们就来详...

    java教程网1362020-04-27
  • JAVA教程jvm内存溢出解决方法(jvm内存溢出怎么解决)

    jvm内存溢出解决方法(jvm内存溢出怎么解决)

    jvm内存溢出解决方法,详细内容看下面解释 ...

    java教程网4922019-10-25
  • JAVA教程Java执行JavaScript代码

    Java执行JavaScript代码

    这篇文章主要为大家详细介绍了Java执行JavaScript代码的具体操作方法,感兴趣的小伙伴们可以参考一下 ...

    云聪5022020-04-13
  • JAVA教程怎么在AVD上安装apk软件

    怎么在AVD上安装apk软件

    执行 Windows 开始菜单 => 所有程序 => 附件 => 命令提示符 或通过 Win+R 组合键调出 运行 对话框输入cmd 单击确定即可 ...

    java教程网4412019-10-14
  • JAVA教程Java实现时间动态显示方法汇总

    Java实现时间动态显示方法汇总

    这篇文章主要介绍了Java实现时间动态显示方法汇总,很实用的功能,需要的朋友可以参考下 ...

    shichen20141912019-11-26