Parser

Olá, preciso mais uma vez de ajuda. Fiz um parser e está funcionando normal, está recuperando os dados normalmente, porém quero jogar esses dados em um txt mas não consigo. Segue abaixo implementação do parser:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.*;

public class ParserXML
{        
    private DocumentBuilderFactory construtorDocumento;
    private DocumentBuilder parser;
    private Document documentoXML;
    
    private Element listaGeralTagsAgrupamento, 
    				listaValoresAtributoIDRegistro,
    				listaTagsDados;
    
    private NodeList listaTagsRegistro, 
                     listaAtributosTagDados; 
    
    private NamedNodeMap atributos;     
    
    public static String[] listaIDRegistro, 
                           listaDadosNome, 
                           listaDadosSenha,
                           listaDadosDeficiencia, 
                           listaDadosFoto;
                          
    
    int i,j,k, totalTagsRegistro, totalTagsSimbolo;    
	
	public ParserXML(String nomeArquivoXML) throws Exception
    { 
        if (nomeArquivoXML.equals("c:/Arquivo.xml")){
        construtorDocumento = DocumentBuilderFactory.newInstance();
        parser = construtorDocumento.newDocumentBuilder();
        documentoXML = parser.parse(nomeArquivoXML);
        
        listaGeralTagsAgrupamento = documentoXML.getDocumentElement();             
    	
	    try
	    {
	       // Constroi uma lista geral com todas as tags de agrupamento,
	       // iniciando pela raiz <gramatica>
	       listaTagsRegistro = listaGeralTagsAgrupamento.getElementsByTagName("registro");	      
	       totalTagsRegistro = listaTagsRegistro.getLength();
	       
	       // Constroi listas de Strings, de acordo com o total de tags <estado>
	       // para armazenar valores de atributos
	       listaIDRegistro = new String[totalTagsRegistro];
           listaDadosNome = new String[totalTagsRegistro];
           listaDadosSenha = new String[totalTagsRegistro];
           listaDadosDeficiencia = new String[totalTagsRegistro];
           listaDadosFoto = new String[totalTagsRegistro];
	       
	       System.out.println("Total de Tags <registro> = " + totalTagsRegistro);
	       System.out.println();
	       	       
	       for (i = 0; i < totalTagsRegistro; i++) 
	       {
	       		// Recupera o valor do atributo "id" em cada tag <registro>
			    listaValoresAtributoIDRegistro = (Element) listaTagsRegistro.item(i);
			    listaIDRegistro[i] = listaValoresAtributoIDRegistro.getAttribute("id");
		   }
	       
	       for (i=0; i < totalTagsRegistro; i++)
    	   {
    	   		// recupera a tag <dados> em cada tag <estado>
		    	listaTagsDados = (Element)listaTagsRegistro.item(i);   	    
		    	listaAtributosTagDados = listaTagsDados.getElementsByTagName("dados");
		    			    	
		      	// controi a lista de atributos da tag <Dados> em 
		      	// cada tag <registro>
		      	atributos = listaAtributosTagDados.item(0).getAttributes();
		      	
		      	// recupera valores dos atributos "nome","senha","deficiencia" e "foto" em
		      	// cada tag <dados> de cada tag <registros>
		      	listaDadosNome[i] = atributos.item(2).getNodeValue();
		      	listaDadosSenha[i] = atributos.item(3).getNodeValue();
		      	listaDadosDeficiencia[i] = atributos.item(0).getNodeValue();
		      	listaDadosFoto[i] = atributos.item(1).getNodeValue();	  		    		      	
     	   }  	     		
     		     		     		
     	   // Apresentando os valores recuperados das tags XML
     	   // e seus atributos
     	   for (i=0; i < totalTagsRegistro; i++)
     	   {
     	   	     System.out.println("==================================");
     		     System.out.println("Registro id = " + listaIDRegistro[i]); 
     		     System.out.println("Nome = " + listaDadosNome[i]);
     		     System.out.println("Senha = " + listaDadosSenha[i]);
     		     System.out.println("Deficiencia = " + listaDadosDeficiencia[i]);
     		     System.out.println("Foto = " + listaDadosFoto[i]);     		         
     		     System.out.println("==================================\n");
     	   }     		         		     		
     	}
     	catch(Exception erro)
     	{
     		// Em caso de erro no processamento do documento XML
     		// Bad-Formatted XML Document
     		System.out.println("Erro de processamento do documentoXML XML " + erro.getMessage());
     	}   
    }
    }

A Saída está sendo:

==================================
Registro id = 1
Nome = Pedro
Senha = 1
Deficiencia = Auditiva
Foto = c:/user/foto.jpg

Como jogar essas informações para um txt da seguinte maneira

Pedro=1;Auditiva#c:/user/foto.jpg%

Desde já agradeço…

Sabe manipular arquivos e/ou conhece ao menos um pouco sobre IO em Java?
Segue: Manipulando arquivos.

Dê uma olhada, vai lhe ser útil.

Obrigado pela dica.

Eu fiz da seguinte forma mas nao criou o arquivo:

private static void gravarEmArquivoTXT() throws IOException {  
  
        BufferedWriter fr = new BufferedWriter(new FileWriter("C:/arquivo.txt",true));
              
             fr.write(listaDadosNome.toString()+"="+listaDadosSenha.toString()+";"+listaDadosDeficiencia.toString()+"#"+listaDadosFoto.toString()+"%");
             
                           
                         fr.flush();  
                 fr.close(); 
}

Procure usar bloco finally para fechar seu stream e evita concatenações seguidas de String, é lento e não é adequado.
Use StringBuilder ou StringBuffer para montar sua String.

Um FileOutputStream não seria mais cômodo para o seu caso?
Está gerando alguma exceção colega?

Só pra complementar a resposta do nel.

StringBuffer é threadsafe, e isso acaba sendo mais custoso em termos de performance.

Portanto se não é algo crítico em relação a concorrência, vá de StringBuilder :slight_smile:

Muito Obrigado à todos pela ajuda…