Ich habe kürzlich ein EDI -Projekt übernommen und viel gewonnen. Tatsächlich hatte ich in meiner ersten Firma Kontakt zu EDI. Zu diesem Zeitpunkt verwendeten wir EDI, um hauptsächlich Bestelldatenübertragung zu realisieren. Die Kunden haben uns Bestellungen an uns abgelegt und die Bestellungen in Form von vereinbarten Nachrichten über VPN- und FTP -Tools an den angegebenen Dateiserver abgegeben. Dann wird unser EDI -System regelmäßig zum Dateiserver gehen, um Nachrichten zu erhalten und schließlich unsere Vertriebsaufträge zu analysieren und zu generieren. Nach diesen Jahren erinnere ich mich noch daran, dass die, die ich am meisten benutzte, EDI850 und EDI855 waren.
1. Lassen Sie uns zunächst das Konzept von EDI vorstellen
Elektronischer Datenaustausch, elektronischer Datenaustausch.
EDI verwendet tatsächlich die ursprüngliche Auftrags-/Sendungshinweise und andere Geschäftsdokumente aus herkömmlichen Methoden wie Fax/Express, um die elektronischen Online -Daten zu interagieren, um die Geschäftseffizienz zu verbessern. Gleichzeitig können durch die Implementierung und Konfiguration einiger EDI -Software entsprechende Dokumentendaten häufig direkt aus dem Geschäftssystem des Unternehmens generiert und automatisch an Kunden/Lieferanten übertragen werden, um die Anwendung auf die Anwendung zu erreichen und menschliche Fehler (z. B. Datenfehler usw.) in Papierdokumenten zu vermeiden. Daher bevorzugen große Unternehmen mit vollständigen IT -Systemen EDI, da EDI für Geschäftspersonal transparent ist und Geschäftspersonal ihre täglichen Geschäftssysteme betreiben kann.
EDI hängt von mehreren Teilen ab:
1. EDI -Übertragungsweg. Im Allgemeinen ist EDI direkt über AS2-Protokoll, FTP/S usw. verbunden und kann auch über Van-Dienstanbieter von Van (Value-Addeded-Netzwerk) übertragen werden (dies ist der gleiche wie unser E-Mail-Modus). Da es sich um Geschäftsinformationen handelt, sind die Anforderungen der Übertragungssicherheit relativ hoch.
2. EDI -Standards, dh die organisatorische Form der Geschäftsdaten, die am häufigsten verwendeten amerikanischen Standards, ANSI X12 und das EDIFACT der Vereinten Nationen und der Europäischen Union. Natürlich gibt es viele andere Standards. Solange beide EDI -Parteien dem gleichen Standard folgen, kann die EDI -Interaktion gut erreicht werden.
3. Die beste Möglichkeit, die EDI -Software (Umgebung) an beiden Enden zu implementieren, besteht darin, automatisch EDI -Nachrichten (Datendateien) nach EDI -Software zu senden und zu empfangen und sie automatisch in das Unternehmens -Unternehmenssystem zu integrieren.
Im Übertragungsweg verwenden wir FTP für die Dateiübertragung. Hier werde ich hauptsächlich vorstellen, wie Java Dateien über FTP -Tools hochladen und herunterladen. Hier ist unser FTP -Server das Linux -Betriebssystem.
2. Java -Paketreferenz
Unter ihnen können "Commons-net-1.4.1.Jar" und "Jakarta-oro-2.0.8.jar" direkt durch Klicken auf den Link heruntergeladen werden, und es wird garantiert verwendet, dass jeder es mit Zuversicht herunterladen kann.
3. Dateipfad <BR/> Der Ordnerpfad "e:/edi/edi850", den der Client standardmäßig hochladen muss, laden Sie alle Dateien in diesem Ordner hoch.
Der Upload -Pfad der FTP -Serverseite ist "/home/test/edi850". Wenn der FTP -Server als Pfad hochgeladen wird, legt er den entsprechenden Pfad fest.
4. Java -Code
FTP -Klasse
Paket com.pcmall; öffentliche Klasse FTP {private String ipaddr; // IP -Adresse privater Integer -Port; // Portnummer privater String -Benutzername; // Benutzername private String pwd; // Passwort private String -Pfad; // Pfad public String getiPaddr () {return iPaddr; } public void setIpaddr (String iPaddr) {this.ipaddr = ipaddr; } public Integer getPort () {return port; } public void setport (Ganzzahlport) {this.port = port; } public String getUnername () {return userername; } public void setUnername (String -Benutzername) {this.username = userername; } public String getPwd () {return pwd; } public void setpwd (String pwd) {this.pwd = pwd; } public String getPath () {return path; } public void setPath (String -Pfad) {this.path = path; }} Ftputil Klasse
Paket com.pcmall; Import Java.io.file; import Java.io.FileInputStream; importieren java.io.fileoutputStream; importieren java.io.ioException; importieren 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 statische FTPClient FTP; / ** * FTP -Verbindung erhalten * * @param f * @return * @throws Exception */ public static boolean Connectftp (ftp f) löst Ausnahme aus {ftp = new ftpclient (); boolesche Flagge = Falsch; int Antwort; 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.BINY_FILE_TYPE); Reply = ftp.getReplyCode (); if (! ftpreply.ispositiveCompletion (Antwort)) {ftp.disconnect (); Rückflagge; } ftp.changeworkingDirectory (f.getPath ()); Flag = wahr; Rückflagge; } / *** FTP -Verbindung schließen* / public static void closeftp () {if (ftp! = Null && ftp.isconnected ()) {try {ftp.logout (); ftp.disconnect (); } catch (ioException e) {e.printstacktrace (); }}} / ** * FTP -Upload -Datei * * @param f * @throws Exception * / public static void Upload (Datei f) löst eine Ausnahme aus {if (f.isdirectory ()) {ftp.makedirectory (f.getName ()); ftp.changeworkingDirectory (f.getName ()); String [] files = f.list (); für (String FSTR: Dateien) {Dateidatei1 = neue Datei (f.getPath () + "/" + fstr); if (Datei1.isdirectory ()) {Upload (Datei1); ftp.ChangetoparentDirectory (); } else {Datei file2 = new Datei (f.getPath () + "/" + fstr); FileInputStream input = new FileInputStream (Datei2); ftp.storefile (file2.getName (), input); input.close (); }}} else {Datei file2 = new Datei (f.getPath ()); FileInputStream input = new FileInputStream (Datei2); ftp.storefile (file2.getName (), input); input.close (); }} / ** * Linkkonfiguration herunterladen * * @param f * @param localBasedir * Lokales Verzeichnis * @param remoteBasedir * Remote -Verzeichnis * @Throws Exception * / public static void Startdown (ftp f, String localBasedir, String remoteBasedir) Ausnahme {if (ftputil.con.connectpased (ftputil) {{if (ftputil.connectil.connectpate boolean wechseln = ftp.ChangeworkingDirectory (Remotebasedir); if (wechseln) {ftp.setControlencoding ("gbk"); Dateien = ftp.listfiles (); für (int i = 0; i <files.length; i ++) {try {downloadFile (Dateien [i], localbasedir, remotebasedir); } catch (Ausnahme e) {logger.Error (e); Logger.Error ("<" + Dateien [i] .GetName () + "> Download fehlgeschlagen"); }}}} catch (Ausnahme e) {logger.Error (e); logger.Error ("Ausnahme beim Herunterladen geschehen"); }} else {logger.Error ("Link fehlgeschlagen!"); }} / ** * * FTP -Datei herunterladen, wenn Sie die FTP -Datei herunterladen müssen, nennen Sie diese Methode, um basierend auf dem Dateinamen, der lokalen Adresse und der Remote -Adresse herunterzuladen, die von <b> * * @param ftpfile erhalten wurde. {if (ftpfile.isfile ()) {if (ftpfile.getName (). indexof ("?") == -1) {outputStream outputStream = null; try {Datei locafile = new Datei (relATivalPath + ftpfile.getName ()); // Bestimmen Sie, ob die Datei existiert, und if (locafile.exists ()) {return; } else {outputStream = new FileOutputStream (relATivalPath + ftpfile.getName ()); ftp.retrieveFile (ftpfile.getName (), outputStream); outputStream.flush (); outputStream.close (); }} catch (Ausnahme e) {logger.Error (e); } endlich {try {if (outputStream! = null) {outputStream.close (); }} catch (ioException e) {logger.Error ("Ausnahme von Dateistream ausgeben"); }}}}} else {String newLocalReLatePath = relATivalPath + ftpfile.getName (); String newRemote = new String (relativeremotepath + ftpfile.getName (). ToString ()); Datei fl = neue Datei (newLocalRelatePath); if (! fl.Exists ()) {fl.mkdir (); } try {newLocalRelatePath = newLocalRelatePath + '/'; newRemote = newRemote + "/"; String currentworkDir = ftpfile.getName (). ToString (); boolean changeeir = ftp.changeworkingdir); if (wechseln) {ftpfile [] files = null; Dateien = ftp.listfiles (); für (int i = 0; i <files.length; i ++) {downloadFile (Dateien [i], NewLocalRelatePath, NewRemote); }} if (wechseln) {ftp.changetoparentDirectory (); }} catch (Ausnahme e) {logger.Error (e); }}} public static void main (String [] args) löst Ausnahme aus {ftp ftp = new ftp (); ftp.setipaddr ("192.168.16.128"); ftp.setusername ("test"); ftp.setpwd ("123456"); Ftputil.connectftp (ftp); Datei Datei = neue Datei ("e:/edi/edi850/"); // Wenn es sich um einen Pfad handelt, werden alle Dateien unter dem Pfad hochgeladen. Wenn es sich um eine Datei handelt, wird die Datei ftputil.Upload (Datei) hochgeladen. }}Nach dem Erfolg des Uploads lautet die FTP -Dateiserver -Dateisituation wie folgt
Nachdem der Download erfolgreich ist, ist der Dateiinhalt wie folgt, nachdem die Client -Datei wie folgt geöffnet wurde. Wie Sie Dateien über FTP -Tools in EDI hochladen und herunterladen, wird hier zuerst vorgestellt. Die oben genannten Codes, die ich persönlich teste und die ich getestet habe und ausgeführt werden kann.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.