在FTP中读取file.xml

时间:2018-10-05 23:11:59

标签: java

我在读取FTP中的.xml文件时遇到问题,并且出现以下消息:“ ftp:\ cifpag \ FilesNotes \ Maxdata_Venda_209016.XML(文件名,目录名或卷标签的语法不正确) ”,在代码中,此代码注释了已经完成的测试以及每个步骤中发生的事情,它遵循以下代码:

公共类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 {
                                //BEGIN 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());
                                //END TO 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(){

}

}

2 个答案:

答案 0 :(得分:0)

您可以阅读此示例。 https://www.codejava.net/java-se/networking/ftp/java-ftp-file-download-tutorial-and-example

第1步:将文件下载到本地存储。

步骤2:读取文件XML。

祝你好运

答案 1 :(得分:0)

我能够通过将XML文件转换为字符串然后返回为xml来执行代码,希望对您有所帮助。

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();
        }
    }
}

}