1
Good Afternoon, I have an algorithm that takes all the files of an x directory, and reads them, but these files have to be XML, and sometimes RAR files appear, then at the time of reading give error because it cannot enter the file, would have something I can do for it to read is only XML, discarding the other files?
Here it reads the localXML.xml, where it is informed where it is saved and soon after it is creates an array with the name of all the files, whether XML or not.
// realiza a leitura do xml para identificar o local onde esta os XMLs salvos
File lerxml = new File("C:\\FTP\\arquivos\\localXML.xml");
xml = builder.parse(lerxml);
NodeList locais = xml.getElementsByTagName("localXML");
e = (Element) locais.item(0);
String local = e.getTextContent();
// ja com a identificação feita é criado um vetor onde é recebido o nome de tds os xmls
File diretorio = new File(local);
arquivos = diretorio.listFiles();
int i; // contador primeiro for
int j; // contador segundo for
int a = 0; // contador de linhas geradas
what I would like is that it only takes the XML disregarding the other files, or, in hr trying to read the same, it checks whether it is XML or not, if it is not it nor runs the reading.
Complete code
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package ftp;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/**
*
* @author samuel.silva
*/
public class FTP {
public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException {
DocumentBuilderFactory fabrica = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = fabrica.newDocumentBuilder();
Document xml;
Element e;
File arquivos[];
// realiza a leitura do xml para identificar o local onde esta os XMLs salvos
File lerxml = new File("C:\\FTP\\arquivos\\localXML.xml");
xml = builder.parse(lerxml);
NodeList locais = xml.getElementsByTagName("localXML");
e = (Element) locais.item(0);
String local = e.getTextContent();
// ja com a identificação feita é criado um vetor onde é recebido o nome de tds os xmls
File diretorio = new File(local);
arquivos = diretorio.listFiles();
int i; // contador primeiro for
int j; // contador segundo for
int a = 0; // contador de linhas geradas
//entra em um arquivo por vez pegando os dados
for (i = 0; i < arquivos.length; i++) {
// realiza a leitura para saber quantos dados tem no xml atual
xml = builder.parse(arquivos[i]);
xml.getDocumentElement().normalize();
NodeList quant = xml.getElementsByTagName("esn");
int k = quant.getLength();
// le tds os dados do xml atual
for (j = 0; j < k; j++) {
a++; // contador
//pegas a informação referente aos Playload
NodeList payloads = xml.getElementsByTagName("payload");
e = (Element) payloads.item(j);
String payload = e.getTextContent();
System.out.println(payload);
//pegas a informação referente aos esn
NodeList aparelhos = xml.getElementsByTagName("esn");
e = (Element) aparelhos.item(j);
String esn = e.getTextContent();
System.out.println(esn);
//pegas a informação referente aos timeStamp
NodeList timeStamps = xml.getElementsByTagName("stuMessages");
e = (Element) timeStamps.item(0); // diferente da capturas anterior, o timeStamp é unico dentro de cada arquivo
String timeStamp = e.getAttribute("timeStamp");
System.out.println(timeStamp);
//realiza a criação de varios csn, onde cada csv é referente a um modem(esn)
File arquivo = new File("C:\\Ler XML\\resultado.csv");
arquivo.createNewFile(); //Caso voce queira criar um novo arquivo a partir de cada formulario use esse comando
try (FileWriter fw = new FileWriter(arquivo, true)) {
//salva as informações no mesmo
fw.write(payload + ";" + esn + ";" + timeStamp + "\r\n");
}
}
}
// contador de linhas Geradas
System.out.println("Numero de Linhas Geradas: " + a);
}
}
----------------------------Update 2 ---------------------------------------
I did what you said But this presenting an error now, follow Print
I performed an Update 2 on my question
– Samuel Silva
I did a search and found that the error may be XML that something is missing.
– Samuel Silva
However I am talking about 3180 xml, there is no way I can locate which one is with the problem, in case I would have to ignore it in hr to run the algorithm, find a way to read. every day I’ll have this file base
– Samuel Silva
Try to make an exception treatment during the parser, it will already stop giving error and you can still figure out which XML is incorrect.
– Daniel Mendes