国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

EDI中JAVA通過(guò)FTP工具實(shí)現(xiàn)文件上傳下載實(shí)例

2019-11-26 13:35:53
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

最近接手一個(gè)EDI項(xiàng)目,收獲頗多。其實(shí)我在第一家公司是接觸過(guò)EDI的,當(dāng)初我們用EDI主要實(shí)現(xiàn)了訂單數(shù)據(jù)傳輸,客戶向我們下達(dá)采購(gòu)訂單,通過(guò)VPN及FTP工具將采購(gòu)訂單以約定的報(bào)文形式放到指定的文件服務(wù)器中,然后我們EDI系統(tǒng)會(huì)定時(shí)去文件服務(wù)器中獲取報(bào)文,最后解析并生成我們的銷售訂單。這些年過(guò)去了,我仍記著當(dāng)初用的最多的是EDI850、EDI855。

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

Electronic data interchange,電子數(shù)據(jù)交換。

EDI其實(shí)就是把原來(lái)紙質(zhì)的訂單/發(fā)貨通知等業(yè)務(wù)單據(jù),從傳真/快遞等傳統(tǒng)方式,變成在線的電子數(shù)據(jù)方式進(jìn)行交互,從而提高業(yè)務(wù)效率。同時(shí),通過(guò)一些EDI軟件的實(shí)施配置,往往可以直接從企業(yè)的業(yè)務(wù)系統(tǒng)生成出相應(yīng)的單據(jù)數(shù)據(jù),并自動(dòng)傳送至客戶/供應(yīng)商處,實(shí)現(xiàn)Application to Application的效果,避免紙質(zhì)單據(jù)中人為造成的錯(cuò)誤(如數(shù)據(jù)錯(cuò)誤等)。所以IT系統(tǒng)完善的大公司更喜歡EDI,因?yàn)镋DI對(duì)于業(yè)務(wù)人員是透明的,業(yè)務(wù)人員操作自己日常的業(yè)務(wù)系統(tǒng)就可以了。

EDI依賴于幾個(gè)部分:

1、EDI傳輸途徑,一般EDI通過(guò)AS2協(xié)議、FTP/S等進(jìn)行直聯(lián),也可以通過(guò)第三方的VAN(增值網(wǎng))服務(wù)商中轉(zhuǎn)(這個(gè)和我們使用電子郵件的模式相同)。因?yàn)樯婕暗綐I(yè)務(wù)信息,傳輸安全要求會(huì)比較高;

2、EDI標(biāo)準(zhǔn),即業(yè)務(wù)數(shù)據(jù)的組織形式,目前最常用的美標(biāo)的ANSI X12和聯(lián)合國(guó)和歐盟的EDIFact,當(dāng)然還有很多其他標(biāo)準(zhǔn),只要EDI雙方遵循同一標(biāo)準(zhǔn),就可以很好的實(shí)現(xiàn)EDI交互;

3、兩端的EDI軟件(環(huán)境),一般最好的實(shí)現(xiàn)方式是由EDI軟件自動(dòng)收發(fā)EDI報(bào)文(數(shù)據(jù)文件),并自動(dòng)集成到企業(yè)業(yè)務(wù)系統(tǒng)中。

其中傳輸途徑中,我們采用的是FTP進(jìn)行文件傳輸?shù)模@里我主要介紹一下Java是如何通過(guò)FTP工具進(jìn)行文件的上傳與下載,這里我們的FTP服務(wù)器是Linux操作系統(tǒng)。

二、JAVA架包引用

其中“commons-net-1.4.1.jar”、“jakarta-oro-2.0.8.jar”點(diǎn)擊鏈接均可直接下載,并且確保是可以用的,大家可以放心下載。

三、文件路徑
客戶端需要上傳的文件夾路徑"E:/edi/edi850",默認(rèn)是將該文件夾下所有文件上傳
FTP服務(wù)器端上傳路徑為“/home/test/edi850”,如果上傳為路徑則FTP服務(wù)器會(huì)建立對(duì)應(yīng)同樣的路徑

四、JAVA代碼
FTP類

package com.pcmall;  public class Ftp {   private String ipAddr;// ip地址   private Integer port;// 端口號(hào)   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;    /**    * 獲取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;   }    /**    * 關(guān)閉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    *      遠(yuǎn)程目錄    * @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("下載過(guò)程中出現(xiàn)異常");       }     } else {       logger.error("鏈接失敗!");     }    }    /**    *    * 下載FTP文件 當(dāng)你需要下載FTP文件的時(shí)候,調(diào)用此方法 根據(jù)<b>獲取的文件名,本地地址,遠(yuǎn)程地址</b>進(jìn)行下載    *    * @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文件測(cè)試,第二個(gè)參數(shù)為客戶端下載地址,第三個(gè)參數(shù)為文件服務(wù)器下載路徑     System.out.println("ok");    }  } 

上傳成功后,F(xiàn)TP文件服務(wù)器文件情況如下

下載成功后,客戶端文件如下
打開后,文件內(nèi)容如下
好了,EDI中如何通過(guò)FTP工具進(jìn)行文件的上傳與下載先介紹到這里,以上代碼本人均親自測(cè)試,可以運(yùn)行。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 白山市| 三河市| 交口县| 靖西县| 博野县| 文昌市| 茌平县| 盐山县| 江北区| 汨罗市| 体育| 塔河县| 盐边县| 铅山县| 南岸区| 汉源县| 维西| 澜沧| 囊谦县| 湄潭县| 民乐县| 左贡县| 筠连县| 惠水县| 浦东新区| 沂南县| 韩城市| 金溪县| 容城县| 淮安市| 小金县| 河东区| 莒南县| 宁乡县| 永德县| 三穗县| 遂川县| 长治市| 桃园市| 隆回县| SHOW|