Recientemente me hice cargo de un proyecto EDI y gané mucho. De hecho, tuve contacto con EDI en mi primera compañía. En ese momento, utilizamos EDI para realizar principalmente la transmisión de datos de pedidos. Los clientes nos hicieron pedidos de compra y colocaron las órdenes de compra en forma de mensajes acordados al servidor de archivos designado a través de herramientas VPN y FTP. Luego, nuestro sistema EDI irá regularmente al servidor de archivos para obtener mensajes, y finalmente analizar y generar nuestros pedidos de ventas. Después de estos años, todavía recuerdo que los que más usé fueron EDI850 y EDI855.
1. Primero, presentemos el concepto de EDI
Intercambio electrónico de datos, intercambio de datos electrónicos.
EDI en realidad utiliza el aviso original de pedido/envío de papel y otros documentos comerciales de métodos tradicionales como Fax/Express para interactuar con datos electrónicos en línea para mejorar la eficiencia comercial. Al mismo tiempo, a través de la implementación y configuración de algún software EDI, los datos de documentos correspondientes a menudo se pueden generar directamente desde el sistema comercial de la empresa y transmitirse automáticamente a los clientes/proveedores para lograr el efecto de la aplicación a la aplicación y evitar errores humanos (como errores de datos, etc.) en documentos en papel. Por lo tanto, las grandes empresas con sistemas de TI completos prefieren EDI porque EDI es transparente para el personal de negocios, y el personal de negocios puede operar sus sistemas comerciales diarios.
EDI depende de varias partes:
1. Vía de transmisión EDI. En general, EDI está directamente conectado a través del protocolo AS2, FTP/S, etc., y también se puede transferir a través de proveedores de servicios de camioneta de terceros (red agregada por valor agregado) (esto es lo mismo que nuestro modo de correo electrónico). Debido a que involucra información comercial, los requisitos de seguridad de la transmisión serán relativamente altos;
2. Estándares EDI, es decir, la forma organizativa de datos comerciales, los estándares estadounidenses más utilizados, ANSI X12 y Edifact de las Naciones Unidas y la Unión Europea. Por supuesto, hay muchos otros estándares. Mientras ambas fiestas EDI sigan el mismo estándar, la interacción EDI se puede lograr bien;
3. La mejor manera de implementar el software EDI (entorno) en ambos extremos es enviar y recibir automáticamente mensajes EDI (archivos de datos) por el software EDI e integrarlos automáticamente en el sistema empresarial empresarial.
En la ruta de transmisión, usamos FTP para la transferencia de archivos. Aquí presentaré principalmente cómo Java carga y descarga archivos a través de herramientas FTP. Aquí nuestro servidor FTP es el sistema operativo Linux.
2. Referencia de paquete Java
Entre ellos, "Commons-Net-1.4.1.Jar" y "Jakarta-Ooro-2.0.8.JAR" se pueden descargar directamente haciendo clic en el enlace, y se garantiza que se utilizará, para que todos puedan descargarlo con confianza.
3. Ruta del archivo <Br/> La ruta de la carpeta "E:/EDI/EDI850" que el cliente necesita cargar, de forma predeterminada, cargue todos los archivos en esta carpeta.
La ruta de carga del lado del servidor FTP es "/Home/Test/EDI850". Si se carga como una ruta, el servidor FTP establecerá la ruta correspondiente.
4. Código Java
Clase FTP
paquete com.pcmall; public class ftp {private string ipaddr; // dirección ip puerto entero privado; // número de puerto string string string username; // username string private string pwd; // contraseña privada string string ruta; // stry public string getIpaddr () {return ipaddr; } public void setipaddr (string ipaddr) {this.ipaddr = ipaddr; } public Integer getPort () {return Port; } public void setPort (puerto entero) {this.port = puerto; } 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 () {ruta de retorno; } public void setPath (ruta de cadena) {this.path = ruta; }} Clase ftputil
paquete com.pcmall; import java.io.file; import java.io.fileInputStream; import java.io.fileOutputStream; import java.io.ioException; import java.io.outputstream; importar org.apache.commons.net.ftp.ftpclient; importar org.apache.commons.net.ftp.ftpfile; importar org.apache.commons.net.ftp.ftpreply; importar org.apache.log4j.logger; clase pública ftputil {private static logger = logger.getLogger (ftputil.class); FTPClient estático privado FTP; / ** * Obtener la conexión FTP * * @param f * @return * @throws excepción */ public static boolean Connectftp (ftp f) lanza excepción {ftp = new ftpClient (); bandera booleana = falso; int respuesta; 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); respuesta = ftp.getReplyCode (); if (! ftPreply.ispositiveCompletion (respuesta)) {ftp.disconnect (); Bandera de regreso; } ftp.changeworkingDirectory (f.getPath ()); bandera = verdadero; Bandera de regreso; } / *** Cerrar la conexión FTP* / public static void closeftp () {if (ftp! = Null && ftp.isconnected ()) {try {ftp.logout (); ftp.disconnect (); } catch (ioException e) {E.PrintStackTrace (); }}} / ** * FTP FILE de carga * * @param f * @throws Exception * / public static void upload (archivo f) lanza la excepción {if (f.isDirectory ()) {ftp.MakedIrectory (f.getName ()); ftp.changeworkingDirectory (f.getName ()); Cadena [] archivos = f.list (); for (string fSTR: files) {archivo file1 = nuevo archivo (f.getPath () + "/" + fstr); if (file1.isDirectory ()) {upload (file1); ftp.changeToparentDirectory (); } else {archivo file2 = nuevo archivo (f.getPath () + "/" + fstr); FileInputStream input = new FileInputStream (file2); ftp.storeFile (file2.getName (), entrada); input.close (); }}} else {archivo file2 = nuevo archivo (f.getPath ()); FileInputStream input = new FileInputStream (file2); ftp.storeFile (file2.getName (), entrada); input.close (); }} / ** * Descargar Configuración del enlace * * @param f * @param localBasedir * Directorio local * @param RemoteBasedir * Directorio remoto * @throws Exception * / public static void startdown (ftp f, string localBasedIns. boolean cambiado = ftp.changeworkingDirectory (remotoBaseDir); if (cambiair) {ftp.setControlEncoding ("gbk"); archivos = ftp.listFiles (); for (int i = 0; i <files.length; i ++) {try {downloadFile (archivos [i], localBasedir, remotoBasedIR); } capt (excepción e) {logger.error (e); logger.error ("<" + archivos [i] .getName () + "> descargar fallado"); }}}} capt (excepción e) {logger.error (e); logger.error ("La excepción ocurrió durante la descarga"); }} else {logger.error ("¡Falló el enlace!"); }} / ** * * Descargue el archivo ftp Cuando necesite descargar el archivo ftp, llame a este método para descargar según el nombre del archivo, la dirección local y la dirección remota obtenida por <b> * * * @param ftpfile * @param relativeLocalPath * @param relativeremotepath * / private satic void descargar relativeremotepath) {if (ftpfile.isfile ()) {if (ftpfile.getName (). indexOf ("?") == -1) {outputStream outputStream = null; intente {archivo locaFile = nuevo archivo (relativeLocalPath + ftpfile.getName ()); // determinar si el archivo existe, y if (locaFile.exists ()) {return; } else {outputStream = new FileOutputStream (relativeLocalPath + ftpfile.getName ()); ftp.retrieveFile (ftpfile.getName (), outputStream); outputStream.Flush (); outputStream.close (); }} capt (excepción e) {logger.error (e); } Finalmente {try {if (outputStream! = null) {outputStream.Close (); }} Catch (ioException e) {logger.error ("Excepción de flujo de archivo de salida"); }}}}} else {String newLocalRelatePath = RelativeLocalPath + ftpfile.getName (); String newRemote = new String (RelativerEmotePath + ftpfile.getName (). ToString ()); Archivo fl = nuevo archivo (newLocalRelatePath); if (! fl.exists ()) {fl.mkdir (); } try {newLocalRelatePath = newLocalRelatePath + '/'; newremote = newremote + "/"; String CurrentWorkDir = ftpfile.getName (). ToString (); boolean Changeir = ftp.changeworkingDir); if (cambiair) {ftpfile [] files = null; archivos = ftp.listFiles (); for (int i = 0; i <files.length; i ++) {downloadFile (archivos [i], newLocalRelatePath, newRemote); }} if (cambiair) {ftp.changeToparentDirectory (); }} capt (excepción e) {logger.error (e); }}} public static void main (string [] args) arroja excepción {ftp ftp = new ftp (); ftp.setIpaddr ("192.168.16.128"); ftp.setUsername ("prueba"); ftp.setpwd ("123456"); Ftputil.connectftp (ftp); Archivo archivo = nuevo archivo ("e:/edi/edi850/"); // Si es una ruta, todos los archivos en la ruta se cargarán. Si es un archivo, el archivo se cargará ftputil.upload (archivo); // cargue el archivo en ftp ftputil.startdown (ftp, "e:/ftptest/", "/home/test/edi850"); // Descargar el archivo ftp para probar, el segundo parámetro es el cliente de descarga del cliente y el tercer parámetro es la ruta del servidor de archivo es el servidor de archivos. System.out.println ("OK"); }}Una vez que la carga es exitosa, la situación del archivo del servidor de archivos FTP es la siguiente
Una vez que la descarga es exitosa, después de abrir el archivo del cliente de la siguiente manera, el contenido del archivo es el siguiente. Cómo cargar y descargar archivos a través de herramientas FTP en EDI se introducirá aquí primero. Los códigos anteriores que probé personalmente y se pueden ejecutar.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.