栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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架包引用

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

三、文件路径
客户端需要上传的文件夹路径"E:ediedi850",默认是将该文件夹下所有文件上传
FTP服务器端上传路径为“/home/test/edi850”,如果上传为路径则FTP服务器会建立对应同样的路径

四、JAVA代码
FTP类

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类

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; 
 
   
  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; 
  } 
 
   
  public static void closeFtp() { 
    if (ftp != null && ftp.isConnected()) { 
      try { 
 ftp.logout(); 
 ftp.disconnect(); 
      } catch (IOException e) { 
 e.printStackTrace(); 
      } 
    } 
  } 
 
   
  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(); 
    } 
  } 
 
   
  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("链接失败!"); 
    } 
 
  } 
 
   
  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中如何通过FTP工具进行文件的上传与下载先介绍到这里,以上代码本人均亲自测试,可以运行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/148720.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号