나는 최근에 EDI 프로젝트를 인수하고 많은 것을 얻었습니다. 사실, 저는 첫 번째 회사에서 EDI와 연락했습니다. 당시 우리는 EDI를 사용하여 주로 주문 데이터 전송을 실현했습니다. 고객은 구매 주문을 당사에 배치하고 VPN 및 FTP 도구를 통해 합의 된 메시지 형식으로 구매 주문을 지정된 파일 서버에 배치했습니다. 그런 다음 EDI 시스템은 정기적으로 파일 서버로 이동하여 메시지를 얻고 마지막으로 판매 주문을 구문 분석하고 생성합니다. 이 기간이 지난 후에도 나는 내가 가장 많이 사용한 것이 EDI850과 EDI855라는 것을 여전히 기억합니다.
1. 첫째, EDI의 개념을 소개합시다
전자 데이터 교환, 전자 데이터 교환.
EDI는 실제로 온라인 전자 데이터를 상호 작용하여 비즈니스 효율성을 향상시키는 데 사용되는 팩스/Express와 같은 기존 방법의 원래 종이 주문/배송 통지 및 기타 비즈니스 문서를 사용합니다. 동시에, 일부 EDI 소프트웨어의 구현 및 구성을 통해, 해당 문서 데이터는 종종 엔터프라이즈의 비즈니스 시스템에서 직접 생성 될 수 있으며 고객/공급 업체로 자동 전송하여 응용 프로그램에 대한 응용 프로그램의 효과를 달성하고 종이 문서의 인적 오류 (예 : 데이터 오류 등)를 피할 수 있습니다. 따라서 완전한 IT 시스템을 가진 대기업은 EDI가 비즈니스 담당자에게 투명하고 비즈니스 담당자는 일일 비즈니스 시스템을 운영 할 수 있기 때문에 EDI를 선호합니다.
EDI는 여러 부분에 따라 다릅니다.
1. EDI 전송 경로. 일반적으로 EDI는 AS2 프로토콜, FTP/S 등을 통해 직접 연결되며 타사 VAN (Value-Added Network) 서비스 제공 업체 (이는 전자 메일 모드와 동일)를 통해 전송할 수도 있습니다. 비즈니스 정보가 포함되기 때문에 전송 보안 요구 사항은 비교적 높습니다.
2. EDI 표준, 즉 조직의 비즈니스 데이터 형태, 가장 일반적으로 사용되는 미국 표준, ANSI X12 및 유엔 및 유럽 연합의 Edifact. 물론 다른 많은 표준이 있습니다. 두 EDI 당사자가 동일한 표준을 따르는 한, EDI 상호 작용은 잘 달성 될 수 있습니다.
3. 양쪽 끝에서 EDI 소프트웨어 (환경)를 구현하는 가장 좋은 방법은 EDI 소프트웨어로 EDI 메시지 (데이터 파일)를 자동으로 보내고 수신하고 엔터프라이즈 비즈니스 시스템에 자동으로 통합하는 것입니다.
전송 경로에서 파일 전송에 FTP를 사용합니다. 여기에서 주로 Java가 FTP 도구를 통해 파일을 업로드하고 다운로드하는 방법을 소개합니다. 여기서 FTP 서버는 Linux 운영 체제입니다.
2. Java 패키지 참조
그 중에서 "Commons-Net-1.4.1.jar"및 "Jakarta-Oro-2.0.8.jar"는 링크를 클릭하여 직접 다운로드 할 수 있으며 사용되도록 보장되므로 모든 사람이 자신감을 가지고 다운로드 할 수 있습니다.
3. 파일 경로 <br/> 클라이언트가 기본적 으로이 폴더의 모든 파일을 업로드 해야하는 폴더 경로 "e :/edi/edi850".
FTP 서버 측의 업로드 경로는 "/home/test/edi850"입니다. 경로로 업로드하면 FTP 서버가 해당 경로를 설정합니다.
4. Java 코드
FTP 클래스
패키지 com.pcmall; 공개 클래스 ftp {private String iPaddr; // ip 주소 비공개 정수 포트; // 포트 번호 개인 문자열 사용자 이름; // 사용자 이름 개인 문자열 pwd; // 비밀번호 개인 문자열 경로; // path public string getipaddr () {return iPaddr; } public void setipaddr (String iPaddr) {this.ipaddr = iPaddr; } public integer getport () {return port; } public void setport (정수 포트) {this.port = 포트; } public String getUserName () {return username; } public void setusername (String username) {this.username = username; } public String getPwd () {return pwd; } public void setpwd (문자열 pwd) {this.pwd = pwd; } public String getPath () {return path; } public void setpath (문자열 경로) {this.path = 경로; }} ftputil 클래스
패키지 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; 공개 클래스 ftputil {private static logger logger = logger.getLogger (ftputil.class); 개인 정적 ftpclient ftp; / ** * ftp 연결을 얻습니다 * * @param f * @return * @throws 예외 */ public static boolean connectftp (ftp f)는 예외를 {ftp = new ftpclient (); 부울 플래그 = 거짓; int 답장; 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); 답장 = ftp.getReplyCode (); if (! ftpReply.ispositiveCoMpletion (답장)) {ftp.disconnect (); 리턴 플래그; } ftp.changeworkingDirectory (f.getPath ()); flag = true; 리턴 플래그; } / *** 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 (파일 f) 예외 {if (f.isdirectory ()) {ftp.makedirectory (f.getname ()); ftp.changeworkingDirectory (f.getName ()); 문자열 [] files = f.list (); for (string fstr : files) {file file1 = 새 파일 (f.getPath () + "/" + fstr); if (file1.isdirectory ()) {upload (file1); ftp.changetoparentDirectory (); } else {file file2 = 새 파일 (f.getPath () + "/" + fstr); FileInputStream input = 새 FileInputStream (file2); ftp.storefile (file2.getName (), 입력); input.close (); }}} else {file file2 = 새 파일 (f.getPath ()); FileInputStream input = 새 FileInputStream (file2); ftp.storefile (file2.getName (), 입력); input.close (); }} / ** * 링크 구성 다운로드 * * @param f * @param localBasedir * 로컬 디렉토리 * @Param RemoteBasedir * 원격 디렉토리 * @throws Exception * / public static void startDown (ftp f, String localBasedir, String remoteBasedir) {if (ftputil.connectftp (f)) {ftpile [] null; 부울 changeir = ftp.changeworkingDirectory (RemoteBasedir); if (changeir) {ftp.setcontrolencoding ( "gbk"); files = ftp.listfiles (); for (int i = 0; i <files.length; i ++) {try {downloadfile (files [i], localbasedir, remotebasedir); } catch (예외 e) {logger.error (e); logger.error ( "<" + files [i] .getName () + "> 다운로드 실패"); }}}} catch (예외 e) {logger.error (e); logger.error ( "다운로드 중에 예외가 발생했습니다"); }} else {logger.error ( "링크 실패!"); }} / ** * * FTP 파일 다운로드 FTP 파일을 다운로드해야 할 때 FTP 파일을 다운로드하고 파일 이름, 로컬 주소 및 <b> * @param ftpfile * @param eleveloveCalpath * @Param RelativeRemotePath * / private void downloadfile (ftpfile ftpfile, string, string inveliverepath) (ftpfile.isfile ()) {if (ftpfile.getname (). indexof ( "?") == -1) {outputStream outputStream = null; try {file locafile = new File (RelativeloCalPath + ftpfile.getName ()); // 파일이 존재하는지 확인하고 (locafile.exists ()) {return; } else {outputStream = new FileOutputStream (RelativeLocalPath + ftpfile.getName ()); ftp.retrievefile (ftpfile.getName (), outputStream); outputStream.flush (); outputStream.close (); }} catch (예외 e) {logger.error (e); } 마침내 {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 ()); fl = 새 파일 (NewlocalRelatePath); if (! fl.exists ()) {fl.mkdir (); } try {NewlocalRelatePath = NewLocalRelatePath + '/'; NewRemote = NewRemote + "/"; 문자열 currentWorkDir = ftpfile.getName (). toString (); 부울 changeir = ftp.changeworkingdir); if (changeir) {ftpfile [] files = null; files = ftp.listfiles (); for (int i = 0; i <files.length; i ++) {downloadfile (파일 [i], NewlocalRelatePath, NewRemote); }} if (changeir) {ftp.changetoparentDirectory (); }} catch (예외 e) {logger.error (e); }}} public static void main (String [] args)은 예외 {ftp ftp = new ftp (); ftp.setipaddr ( "192.168.16.128"); ftp.setusername ( "테스트"); ftp.setpwd ( "123456"); ftputil.connectftp (ftp); 파일 = 새 파일 ( "e :/edi/edi850/"); // 경로 인 경우 경로의 모든 파일이 업로드됩니다. 파일이 파일이 업로드됩니다. ftputil.upload (file); // ftp ftputil.startdown (ftp, "e :/ftptest/", "/home/test/edi850"에 파일을 업로드합니다. // FTP 파일을 다운로드하여 테스트, 두 번째 매개 변수는 파일 다운로드 (OK Server)입니다. }}업로드가 성공하면 FTP 파일 서버 파일 상황은 다음과 같습니다.
다운로드가 성공하면 클라이언트 파일이 다음과 같이 열린 후 파일 내용은 다음과 같습니다. EDI의 FTP 도구를 통해 파일을 업로드하고 다운로드하는 방법이 먼저 여기에서 소개됩니다. 위의 코드는 개인적으로 테스트하고 실행할 수 있습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.