Read file.xml in an FTP

0

I have a problem reading an .xml file in an FTP, and the following message appears: "ftp: \ cipher.ca \ FileName \ Maxdata_Venda_209016.XML (The syntax of the file name, directory name, or volume label is incorrect) ", in the code this commenting on the tests that already were done and what happens in each step, it follows the code below:

public class ImportXmlFromFTP {

private static Connection conexao;

private String endereco_ftp; 
private String usuario;
private String senha;
private String caminho_ftp;
private String caminho_local;
private String valor;

public ImportXmlFromFTP(){

}

public void inicia() throws SocketException, IOException, SQLException {

    //DADOS CONEXAO
    this.conexao = ConexaoBancoDeDados.getConexao();  

    String sql = "SELECT daea_endereco_ftp, daea_usuario, daea_senha, daea_caminho_ftp, daea_caminho_local FROM sistema.dados_envio_arquivos";
    PreparedStatement stmtSelect = this.conexao.prepareStatement(sql);
    ResultSet rs = stmtSelect.executeQuery();
    List<DadosEnviaArquivos> listaCliente = new ArrayList<DadosEnviaArquivos>();

    while(rs.next()){
        DadosEnviaArquivos dados = new DadosEnviaArquivos();

        endereco_ftp = rs.getString("daea_endereco_ftp");
        usuario = rs.getString("daea_usuario");
        senha = rs.getString("daea_senha");
        caminho_ftp = rs.getString("daea_caminho_ftp");
        caminho_local = rs.getString("daea_caminho_local");

    }    

     //CONEXAO COM FTP
      FTPClient ftp = new FTPClient();
         ftp.connect(endereco_ftp);
         ftp.login( usuario, senha );
         ftp.changeWorkingDirectory (caminho_ftp);

       //PASTA COM OS ARQUIVOS
         int m = 0;
         String nomeArquivo = "";
         File caminhoParaFTP = new File(caminho_local + "/");
         File arquivos[] = caminhoParaFTP.listFiles();

         while (m != arquivos.length){
          nomeArquivo = arquivos[m].getName();

          FileInputStream arqEnviar = new FileInputStream(caminhoParaFTP + "/" + nomeArquivo);

          //IMPORTA PARA O FTP
          if (ftp.storeFile (nomeArquivo, arqEnviar)) { 
              System.out.println("Arquivo armazenado com sucesso!");    
                 arqEnviar.close();

                 //APAGA ARQUIVO DA PASTA LOCAL
                 File file = new File(caminhoParaFTP+"/"+nomeArquivo);  
                 file.delete(); 

                 m++;
          }else{
                 System.out.println ("Erro ao armazenar o arquivo.");
          }     
         }

         ftp.disconnect();      

         //LER ARQUIVO DO FTP E IMPORTAR PARA O SISTEMA
       //PEGAR PASTA FTP
            classe_FTP ClienteFTP = new classe_FTP();
            ClienteFTP.Conectar(endereco_ftp, usuario, senha, 21);

            String caminho = caminho_ftp;
            ArrayList<String> nomes=new ArrayList<String>();

            FTPFile[] arquivosFTP = ClienteFTP.Dir(caminho);
            if (arquivosFTP != null) {
                int length = arquivosFTP.length;
                for (int g = 0; g < length; ++g) {
                    FTPFile p = arquivosFTP[g];
                    if (p.isFile()) {

                        String arquivoNominal = p.getName();

                        try { 
                            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                            DocumentBuilder builder = factory.newDocumentBuilder();

                            try {
                                //INICIO DOS TESTES
                                FileInputStream stream = new FileInputStream("ftp:\\cifensa.com.br\ArquivosNotas\" + arquivoNominal);
                                //InputStream is = new FileInputStream("ftp:\\" +"\\cifensa.com.br//ArquivosNotas//" + arquivoNominal);
                                //InputStream stream = ftp.retrieveFileStream(p.getName());
                                //System.out.println("Caminho: "+stream.toString());
                                //FIM DOS TESTE

                                Document doc = builder.parse(stream);

                                NodeList listaDeVenda = doc.getElementsByTagName("venda");
                                int tamanhoDaLista = listaDeVenda.getLength();

                                NodeList listaDeProdutos = doc.getElementsByTagName("item");
                                int tamanhoDaListaDeProdutos = listaDeProdutos.getLength();

                                for(int k = 0; k < tamanhoDaListaDeProdutos; k++){

                                    Pedido pedido = new Pedido();

                                     String slq = "INSERT INTO sistema.pedido(pedi_produto, pedi_quantidade, pedi_preco_unidade_produto, pedi_cliente, pedi_numero_documento, pedi_data_documento, pedi_cliente_cpf, " +
                                               "pedi_numero_documento_fiscal, pedi_unidade, pedi_total_desconto_produto, pedi_valor_desconto_produto, pedi_porcetagem_desconto_produto, " +
                                                "pedi_empresa, pedi_vendedor, pedi_operacao ) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

                                    PreparedStatement stmt = conexao.prepareStatement(slq);

                                    Node noDeProdutos = listaDeProdutos.item(k);

                                    if(noDeProdutos.getNodeType() == Node.ELEMENT_NODE){
                                        Element elementoProduto = (Element) noDeProdutos;
                                        NodeList listaNosFilhosProdutos = elementoProduto.getChildNodes();
                                        int tamandoListaNosFilhosProdutos = listaNosFilhosProdutos.getLength();

                                        for(int l = 0; l < tamandoListaNosFilhosProdutos; l++){
                                            Node nosFilhoProdutos = listaNosFilhosProdutos.item(l);

                                            if(nosFilhoProdutos.getNodeType() == Node.ELEMENT_NODE){
                                                Element elementoNoProduto = (Element) nosFilhoProdutos;

                                                switch(elementoNoProduto.getTagName()){
                                                case "VDIPRONOME":
                                                    stmt.setString(1, elementoNoProduto.getTextContent());
                                                    break;
                                                case "VDIQTDE":
                                                    stmt.setDouble(2, Double.parseDouble(elementoNoProduto.getTextContent()));
                                                    break;
                                                case "VDIVALOR":
                                                    stmt.setDouble(3, Double.parseDouble(elementoNoProduto.getTextContent()));
                                                    break;
                                                }
                                            }
                                        }
                                    }

                                    for(int i = 0; i < tamanhoDaLista; i++ ){
                                        Node noDeVenda = listaDeVenda.item(i);

                                        if(noDeVenda.getNodeType() == Node.ELEMENT_NODE){
                                            Element elementoVenda = (Element) noDeVenda;
                                            NodeList listaNosFilhosVenda = elementoVenda.getChildNodes();
                                            int tamanhoListaNosFilhosVenda = listaNosFilhosVenda.getLength();

                                            for(int j = 0; j < tamanhoListaNosFilhosVenda; j++){
                                                Node noFilhosVenda = listaNosFilhosVenda.item(j);

                                                if(noFilhosVenda.getNodeType() == Node.ELEMENT_NODE){
                                                    Element elementoNoVenda = (Element) noFilhosVenda;

                                                    switch(elementoNoVenda.getTagName()){
                                                        case "VEDCLINOME":
                                                            stmt.setString(4, elementoNoVenda.getTextContent());
                                                            break;
                                                        case "VEDID":
                                                            stmt.setInt(5, Integer.parseInt(elementoNoVenda.getTextContent()));
                                                            break;
                                                        case "VEDABERTURA":
                                                            try{    
                                                                String dataSemFormatacao = elementoNoVenda.getTextContent();
                                                                Timestamp ts = Timestamp.valueOf(dataSemFormatacao);
                                                                stmt.setTimestamp(6, ts);

                                                            } catch (Exception e) {
                                                                e.printStackTrace();
                                                            }
                                                            break;
                                                        case "CLICPFCGC":
                                                            stmt.setString(7, elementoNoVenda.getTextContent());
                                                            break;                                                      
                                                    }
                                                }                               
                                            }                           
                                        }               

                                        stmt.setInt(8, 123);
                                        stmt.setString(9, "UN");
                                        stmt.setDouble(10, 23.4);
                                        stmt.setDouble(11, 14.3);
                                        stmt.setDouble(12, 14.5);
                                        stmt.setInt(13, 1);
                                        stmt.setInt(14, 1);
                                        stmt.setInt(15, 1);

                                        stmt.execute();
                                        stmt.close();

                                        System.out.println("Importado com sucesso!");

                                    }//FIM DO FOR DE DADOS USUARIO

                                }//FIM DO FOR DE PRODUTOS       

                            } catch (SAXException e) {
                                e.printStackTrace();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }   
                        } catch (ParserConfigurationException e) {
                            e.printStackTrace();
                        }

                    }
                }
            }     
}


public static String getFileExtensionName(File f) {
    if (f.getName().indexOf(".") == -1) {
      return "";
    } else {
      return f.getName().substring(f.getName().length() - 3, f.getName().length());
    }
  } 

public void para(){

}

}

    
asked by anonymous 06.10.2018 / 02:11

1 answer

0

I was able to run the code by transforming the XML file into a string and then returning to an xml, I hope it helps but someone.

public class MyFTPClass {

private static FTPFile[] obterArquivosDiretorio(FTPClient ftp, String dirPath) throws IOException {
    String cwd = ftp.printWorkingDirectory();

    ftp.changeWorkingDirectory(dirPath);
    FTPFile[] files = ftp.listFiles();
    ftp.changeWorkingDirectory(cwd);

    return files;
}

public static void main(String args[]) throws SAXException, ParserConfigurationException {

    // Create an instance of FTPClient
    FTPClient ftp = new FTPClient();
    try {

        // Establish a connection with the FTP URL
        ftp.connect("caminho_ftp");
        // Enter user details : user name and password
        boolean isSuccess = ftp.login("usuario", "senha");

        if (isSuccess) {
            // Fetch the list of names of the files. In case of no files an
            // empty array is returned

            String path = "ArquivosNotas";
            FTPFile[] listedDirectories = obterArquivosDiretorio(ftp, path);

            int countXml = 1;
            // Iterate on the returned list to obtain name of each file
            for (FTPFile file : listedDirectories) {

                if (file.getName().toLowerCase().contains("xml")) {

                    System.out.println();
                    System.out.println("Lendo " + countXml + " xml");
                    System.out.println();

                    InputStream stream = ftp.retrieveFileStream("ArquivosNotas/" + file.getName());
                    BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));

                    // xml vai virar uma string para depois fazer o parse para o document
                    StringBuilder sb = new StringBuilder();
                    String inline = "";
                    while ((inline = reader.readLine()) != null) {
                        sb.append(inline);
                    }

                    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder builder = factory.newDocumentBuilder();

                    // convert string do xml para xml em document
                    Document doc = (Document) builder.parse(new ByteArrayInputStream(sb.toString().getBytes()));

                    NodeList listaDeVenda = doc.getElementsByTagName("venda");
                    int tamanhoDaLista = listaDeVenda.getLength();

                    NodeList listaDeProdutos = doc.getElementsByTagName("item");
                    int tamanhoDaListaDeProdutos = listaDeProdutos.getLength();

                    System.out.println();
                    System.out.println("Qtde itens xml " + tamanhoDaListaDeProdutos);

                    System.out.println("Finalizado " + countXml + " xml");
                    System.out.println();
                    countXml++;

                    stream.close();
                    reader.close();
                    ftp.completePendingCommand();
                }

            }
        }

        ftp.logout();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            ftp.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

}

    
18.10.2018 / 15:01