Recentemente, assumi um projeto EDI e ganhei muito. Na verdade, tive contato com a EDI em minha primeira empresa. Naquela época, usamos o EDI para realizar principalmente a transmissão de dados de pedidos. Os clientes fizeram pedidos de compra e colocaram os pedidos de compra na forma de mensagens acordadas no servidor de arquivos designado por meio de ferramentas VPN e FTP. Em seguida, nosso sistema EDI irá regularmente para o servidor de arquivos para obter mensagens e, finalmente, analisar e gerar nossos pedidos de vendas. Depois desses anos, ainda me lembro que os que eu mais usei foram EDI850 e EDI855.
1. Primeiro, vamos apresentar o conceito de EDI
Intercâmbio de dados eletrônicos, troca eletrônica de dados.
O EDI realmente usa o aviso original sobre ordem/remessa em papel e outros documentos comerciais de métodos tradicionais, como fax/expresso, para serem usados para interagir dados eletrônicos on -line para melhorar a eficiência dos negócios. Ao mesmo tempo, através da implementação e configuração de alguns softwares EDI, os dados correspondentes do documento geralmente podem ser gerados diretamente a partir do sistema de negócios da empresa e transmitidos automaticamente aos clientes/fornecedores para alcançar o efeito da aplicação na aplicação e evitar erros humanos (como erros de dados etc.) em documentos em papel. Portanto, grandes empresas com sistemas completos de TI preferem o EDI porque o EDI é transparente ao pessoal de negócios, e o pessoal de negócios pode operar seus sistemas de negócios diários.
EDI depende de várias partes:
1. Caminho de transmissão EDI. Geralmente, o EDI é conectado diretamente através do protocolo AS2, FTP/S, etc., e também pode ser transferido por provedores de serviços de van de terceiros (rede de valor agregado) (esse é o mesmo que o nosso modo de email). Como envolve informações comerciais, os requisitos de segurança de transmissão serão relativamente altos;
2. Os padrões EDI, isto é, a forma organizacional de dados comerciais, os padrões americanos mais usados, Ansi X12 e edifato das Nações Unidas e da União Europeia. Claro, existem muitos outros padrões. Desde que ambas as partes do EDI sigam o mesmo padrão, a interação EDI pode ser bem alcançada;
3. A melhor maneira de implementar o software EDI (Environment) em ambas as extremidades é enviar e receber automaticamente mensagens EDI (arquivos de dados) pelo software EDI e integrá -las automaticamente ao sistema de negócios corporativo.
No caminho da transmissão, usamos FTP para transferência de arquivo. Aqui, apresentarei principalmente como o Java upload e baixará arquivos através de ferramentas FTP. Aqui, nosso servidor FTP é o sistema operacional Linux.
2. Referência do pacote Java
Entre eles, "Commons-Net-1.4.1.jar" e "Jacarta-Oro-2.0.8.jar" podem ser baixados diretamente clicando no link, e é garantido que seja usado, para que todos possam baixá-lo com confiança.
3. Caminho do arquivo <Br/> O caminho da pasta "e:/edi/edi850" que o cliente precisa fazer upload, por padrão, faça o upload de todos os arquivos nesta pasta.
O caminho de upload do lado do servidor FTP é "/home/test/edi850". Se carregado como um caminho, o servidor FTP estabelecerá o caminho correspondente.
4. Código Java
Classe FTP
pacote com.pcmall; classe pública ftp {private string iPaddr; // Endereço IP Porta inteira privada; // Número do número da porta Private String Nome de usuário; // Nome de usuário String privada string pwd; // senha private string path; // path public string getipaddr () {return ipaddr; } public void setipaddr (string ipaddr) {this.ipaddr = ipaddr; } public integer getport () {retorna porta; } public void Setport (porta inteira) {this.port = porta; } public string getUserName () {return userName; } public void setUserName (string userName) {this.username = nome de usuário; } 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; }} Classe ftputil
pacote com.pcmall; importar java.io.file; importar java.io.fileInputStream; importar java.io.fileOutputStream; importar java.io.ioException; importar 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; classe pública ftputil {private static logger logger = logger.getLogger (ftputil.class); ftpclient privado ftpclient; / ** * Obtenha conexão FTP * * @param f * @return * @throws Exception */ public static boolean Connectftp (ftp f) lança exceção {ftp = new ftpClient (); bandeira booleana = 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); resposta = ftp.getReplyCode (); if (! ftPreply.ispositiveCeliction (Responder)) {ftp.disconnect (); bandeira de retorno; } ftp.ChangeWorkingDirectory (f.getPath ()); bandeira = true; bandeira de retorno; } / *** Feche a conexão ftp* / public static void closeftp () {if (ftp! = Null && ftp.isconnected ()) {try {ftp.Logout (); ftp.disconnect (); } catch (ioexception e) {e.printStackTrace (); }}} / ** * arquivo de upload ftp * * @param f * @throws Exception * / public static void upload (arquivo f) lança a exceção {if (f.isdirectory ()) {ftp.Makedirectory (F.getName); ftp.ChangeWorkingDirectory (f.getName ()); String [] arquivos = f.list (); for (string fstr: arquivos) {arquivo file1 = novo arquivo (f.getPath () + "/" + fstr); if (file1.isdirectory ()) {upload (file1); ftp.ChangetoparentDirectory (); } else {arquivo file2 = new File (f.getPath () + "/" + fstr); FileInputStream input = new FileInputStream (File2); ftp.storefile (file2.getName (), entrada); input.Close (); }}} else {arquivo file2 = new File (f.getPath ()); FileInputStream input = new FileInputStream (File2); ftp.storefile (file2.getName (), entrada); input.Close (); }} / ** * Download de configuração do link * * @param f * @param localBasedir * diretório local * @param remotebasedir * diretório remoto * @throws exceção * / public static void startdown (ftpputfil.connectfaspedir, string remotebasedir) throws Exception {if (ftputil.connectfil) boolean alterado if (alterado) {ftp.setControlencoding ("gbk"); arquivos = ftp.listfiles (); for (int i = 0; i <files.length; i ++) {try {downloadfile (arquivos [i], localBasedir, remoteBasedir); } catch (Exceção e) {Logger.error (e); logger.error ("<" + arquivos [i] .getName () + "> download falhou"); }}}} catch (Exceção e) {Logger.error (e); Logger.error ("Exceção ocorreu durante o download"); }} else {Logger.error ("link falhou!"); }} / ** * * Faça o download do arquivo FTP quando precisar baixar o arquivo FTP, ligue para este método para download com base no nome do arquivo, endereço local e endereço remoto obtido por <b> * * @param ftpfile * @param RelativleCalPile * @param RelativeRemoTePathathathathathATHATHATHPIL relativeRemotepath) {if (ftpfile.isfile ()) {if (ftpfile.getName (). tente {arquivo locfile = novo arquivo (relativeflecalpath + ftpfile.getName ()); // Determine se o arquivo existe e se (locfile.exists ()) {return; } else {outputStream = new FileOutputStream (relativeLocalPath + ftpfile.getName ()); ftp.retrievefile (ftpfile.getName (), outputStream); outputStream.flush (); outputStream.Close (); }} catch (Exceção e) {Logger.error (e); } finalmente {tente {if (outputStream! = null) {outputStream.close (); }} catch (ioexception e) {logger.error ("Exceção de fluxo de arquivo de saída"); }}}}} else {string newlocalrelatePath = relativleCalPath + ftpfile.getName (); String newRemote = new String (relativeMotepath + ftpfile.getName (). Tostring ()); Arquivo fl = novo arquivo (newlocalrelatePath); if (! fl.exists ()) {fl.mkdir (); } tente {newlocalrelatePath = newlocalrelatePath + '/'; newRemote = newRemote + "/"; String currentWorkDir = ftpfile.getName (). ToString (); boolean changeir = ftp.ChangeWorkingDir); if (alterado) {ftpfile [] arquivos = null; arquivos = ftp.listfiles (); for (int i = 0; i <files.length; i ++) {downloadfile (arquivos [i], newlocalrelatePath, newRemote); }} if (alterado) {ftp.ChangetoparentDirectory (); }} catch (Exceção e) {Logger.error (e); }}} public static void main (string [] args) lança exceção {ftp ftp = new ftp (); ftp.setipaddr ("192.168.16.128"); ftp.setUsername ("teste"); ftp.setpwd ("123456"); Ftputil.Connectftp (FTP); Arquivo de arquivo = novo arquivo ("e:/edi/edi850/"); // Se for um caminho, todos os arquivos no caminho serão enviados. Se for um arquivo, o arquivo será carregado ftputil.upload (file); // carrega o arquivo no ftp ftputil.startdown (ftp, "e:/ftptest/", "/home/test/edi850"); // download do arquivo FTP para testar, o segundo parâmetro é o endereço do cliente e o endereço do cliente e o primeiro lugar do cliente e o endereço de download do cliente. System.out.println ("ok"); }}Depois que o upload for bem -sucedido, a situação do arquivo do servidor de arquivo FTP é a seguinte
Depois que o download for bem -sucedido, depois que o arquivo do cliente é aberto da seguinte forma, o conteúdo do arquivo é o seguinte. Como fazer upload e baixar arquivos através das ferramentas FTP no EDI será introduzido aqui primeiro. Os códigos acima que testem pessoalmente e podem ser executados.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.