Java Não processo toda a lista de arquivos durante a leitura

2 respostas
steveVai

olá pessoal,
o meu código abaixo lista todos os arquivos numa pasta e depois inicia sua leitura.
O problema é que o java não lê todo os arquivos listados na pasta. São arquivos Xml.
Isolei parte do código original e montei esse para acompanhar passo-a-passo.
Tenho 2.218 xml nessa pasta e o Java completa Leitura de apenas uns 470 as vezes 700.
Nos desvios else e catch só gera os que estão errados, mas somando todos nem chega próximo da quantidade de arquivos que tenho na pasta.
Se alguém puder olhar e ver se existe algum erro na estrutura de progrma, ficarei agradecido.

/**
 * @author Eduardo Rodrigues da Silva
 * @Classe GravaComplLogXml
 * @Version 1.0.0
 * @Date 18/02/2013
 * @Copyrigth: Copyrigth, EngSoftware - Engenharia e Sistema do Software Ltda. (c) 2013.
 */

package br.com.audfis.customizados;

import java.io.File;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.transform.stream.StreamSource;

import br.com.audfis.conexao.dao.CusParamDirXML;
import br.com.audfis.conexao.jdbc.ConsCusParamDirXml;
import br.com.audfis.nfe.v200.ObjectFactory;
import br.com.audfis.nfe.v200.TEnviNFe;


public class GravaComplLogXmlNFe
 {
	public String entrada;
	public String validados;
	public String rejeitados;
	public String excluidos;
	public String atualizados;
	public String invalidos;
	public String processo;
	public String moveXml;
	public String excluiXml;
	
	public File dirEntrada;
	public File dirValidados;
	public File dirRej;
	public File dirExcluido;
	public File dirAtualizados;
	public File dirLayoutInvalido;
	
	public String nomeArquivo;
	public String caminho;
	
	private boolean flegProcesso = false;

	public void gravaComplementoLog(String Obrigacao, int sequence) 
	 {
		/*
    	 * Chama a Classe CusDirXml para recuperar
    	 * as pastas de controle dos arquivos Xml.
    	 */
    	CusParamDirXML cdx = new CusParamDirXML();

    	//Cria a Lista
    	List<ConsCusParamDirXml> lista = cdx.getLista(Obrigacao);

    	for (ConsCusParamDirXml construtor : lista)
    	 {
    		entrada 	= construtor.getDirEntrada();
    		validados	= construtor.getDirArqValidados();
    		rejeitados 	= construtor.getDirArqRej();
    		excluidos	= construtor.getDirArqExcluido();
    		atualizados	= construtor.getDirArqAtualizados();
    		invalidos	= construtor.getDirArqLayoutInvalido();
    		moveXml		= construtor.getMoveXML();
    		excluiXml	= construtor.getExcluiXML();
    	 }// Fim do for

        //Atribui o diretório dos xml às variáveis
    	dirEntrada        = new File(entrada);
    	dirValidados      = new File(validados);
    	dirRej		      = new File(rejeitados);
    	dirExcluido	      = new File(excluidos);
    	dirAtualizados    = new File(atualizados);
    	dirLayoutInvalido = new File(invalidos);

    	//Cria um array com os arquivos
        File[] files = dirEntrada.listFiles();

        //Inicia o Loop
        for (File file : files)
         {
        	if (file.isFile())
       	     {
        		nomeArquivo = file.getName();
        		caminho = file.toString();
        		System.out.println("É um arquivo: "  + file.getName());
        		
        		try
        		 {
      			  	JAXBContext context = JAXBContext.newInstance("br.com.audfis.nfe.v200");
      			  	Unmarshaller unmarshaller = context.createUnmarshaller();
      			  	File notaFile = new File(caminho);

      			  	TEnviNFe enviNFe = ObjectFactory.createTEnviNFe();
      			  	enviNFe = unmarshaller.unmarshal( new StreamSource(notaFile), TEnviNFe.class ).getValue();

      			  	String obrigacao =  enviNFe.getNFe().get(0).getInfNFe().getId();
        			
      			  	System.out.println("Obrigação: " + obrigacao +
      			  	" - Arquivo: " + file.getName());
        		 }//Fim do try
        		catch (Exception ex)
       		     {
        			System.out.println("Não foi possível ler o arquivo: " +
        			file.getName() + "Msg Erro: " + ex.getMessage());
       		     }//Fim do catch
        		
       	     }//Verifica se o objeto encontrado é um arquivo.
        	else
        	 {
        		System.out.println("Não é um arquivo: "  + file.getName());
        	 }
        	
         }//Fim do for (File file : files)
	 }// Fim do método gravaComplementoLog
 }//Fim da classe

2 Respostas

denisspitfire

bom, posta o xml também, acho que há uma inconsistencia no xml, para nao trazer tudo…

nao processa a lista, ou NAO tem na lista?

steveVai

Então individualmente o programa lê todos os Xml.
Quando existe o erro de estrutura do XML está desviando no catch.
No diretório possui cerca de R$ 1.220 Xml, Mas no Print aparece apenas 500 e pouco. Quando mandou gravar no banco de dados os XML, percebo na consulta que os 1220 foram processados.

Alterei a estrutura do código (veja abixo), acredita que dessa forma está mais correto e mais fácil para controlar o fluxo de leitura.

public class GravaComplLogXmlNFe
 {
	public String entrada;
	public String validados;
	public String rejeitados;
	public String excluidos;
	public String atualizados;
	public String invalidos;
	public String processo;
	public String moveXml;
	public String excluiXml;
	
	public File dirEntrada;
	public File dirValidados;
	public File dirRej;
	public File dirExcluido;
	public File dirAtualizados;
	public File dirLayoutInvalido;
	
	public String nomeArquivo;
	public String caminho;
	
	private boolean flegProcesso = false;

	public void gravaComplementoLog(String Obrigacao, int sequence) 
	 {
		/*
    	 * Chama a Classe CusDirXml para recuperar
    	 * as pastas de controle dos arquivos Xml.
    	 */
    	CusParamDirXML cdx = new CusParamDirXML();

    	//Cria a Lista
    	List<ConsCusParamDirXml> lista = cdx.getLista(Obrigacao);

    	for (ConsCusParamDirXml construtor : lista)
    	 {
    		entrada 	= construtor.getDirEntrada();
    		validados	= construtor.getDirArqValidados();
    		rejeitados 	= construtor.getDirArqRej();
    		excluidos	= construtor.getDirArqExcluido();
    		atualizados	= construtor.getDirArqAtualizados();
    		invalidos	= construtor.getDirArqLayoutInvalido();
    		moveXml		= construtor.getMoveXML();
    		excluiXml	= construtor.getExcluiXML();
    	 }// Fim do for

        //Atribui o diretório dos xml às variáveis
    	dirEntrada        = new File(entrada);
    	dirValidados      = new File(validados);
    	dirRej		      = new File(rejeitados);
    	dirExcluido	      = new File(excluidos);
    	dirAtualizados    = new File(atualizados);
    	dirLayoutInvalido = new File(invalidos);

    	//Cria um array com os arquivos
        File[] files = dirEntrada.listFiles();

        //Inicia o Loop
        for (File file : files)
         {
        	if (file.isFile())
       	     {
        		nomeArquivo = file.getName();
        		caminho = file.toString();
        		
        		try 
        		 {
					String xml = lerXML(caminho);
					
		            TNfeProc wNfe = getNFe(xml);  
		            if (wNfe != null) 
		             {    
		             /*   info("| Destinatario[CNPJ]........: " + wNfe.getNFe().getInfNFe().getDest().getCNPJ());    
		                info("| Destinatario[Nome]........: " + wNfe.getNFe().getInfNFe().getDest().getXNome());  
		                info("| Emitente[CNPJ]............: " + wNfe.getNFe().getInfNFe().getEmit().getCNPJ());    
		                info("| Emitente[Nome]............: " + wNfe.getNFe().getInfNFe().getEmit().getXNome()); */ 
		                
		                info("| nome do Arquivo............: " + caminho);  
		                info("| Emitente[Nome]............: " + wNfe.getNFe().getInfNFe().getEmit().getXNome());   
		                  
		             //   System.out.println(wNfe.getNFe().getInfNFe().getDet().size());  
		                for(int i=0; i < wNfe.getNFe().getInfNFe().getDet().size(); i++)
		                 {  
		                   // info("| Item[Nome]............: " + wNfe.getNFe().getInfNFe().getDet().get(i).getProd().getXProd());      
		                 }  
		            } 
					
					
				 } 
        		catch (IOException e) 
        		 {
					// TODO Auto-generated catch block
					System.out.println("Erro gerado: " + e.getMessage());
					e.printStackTrace();
					
				 } catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
       	     }//Fim do if (file.isFile())
         }//Fim do for (File file : file)
	 }//Fim do método gravaComplementoLog
	
    private static String lerXML(String fileXML) throws IOException 
     {    
        String linha = "";    
        StringBuilder xml = new StringBuilder();    
    
        BufferedReader in = new BufferedReader(new InputStreamReader(    
                new FileInputStream(fileXML)));    
        while ((linha = in.readLine()) != null) 
         {    
            xml.append(linha);    
            //System.out.println("Linha Xml: " + xml);
         }    
        in.close();    
    
        return xml.toString();    
     }//Fim do método lerXml 
    
    @SuppressWarnings("unchecked")    
    public static TNfeProc getNFe(String xml) throws Exception{        
        try 
         {        
            JAXBContext context = JAXBContext.newInstance(TNfeProc.class);        
            Unmarshaller unmarshaller = context.createUnmarshaller();        
            TNfeProc nfe = unmarshaller.unmarshal(new StreamSource(new StringReader(xml)), TNfeProc.class).getValue();        
            return nfe;  
         } 
        catch (JAXBException ex) 
         {        
            throw new Exception(ex.toString());        
         }        
    }
    
    private static void info(String log) 
     {    
        System.out.println("INFO: " + log);    
     }
Criado 1 de abril de 2013
Ultima resposta 1 de abr. de 2013
Respostas 2
Participantes 2