Pessoal, estou tendo o seguinte problema.
Necessito gerar um XML temporário, utilizar suas informações e depois excluir ele do disco. Utilizo uma API de tratamento que necessita do arquivo físico, por isso o mesmo não pode estar somente em memória.
Utilizei o seguinte exemplo já postado aqui para geração:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.FileWriter;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
*
* @author T_FFerreira
*/
public class TesteMontarXML {
public TesteMontarXML() {
}
/**
* @author back
*/
static Document doc;
public void MontaXML() {
try{
//gera o Document
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
doc = builder.newDocument();
//adiciona os elementos e atributos
Element agrodados = doc.createElement("agrodados");
Element cadastro = doc.createElement("cadastro");
Element tpm;
Element tpma;
cadastro.setAttribute("date", "1999-100-10");
tpm = doc.createElement("Grupo");
tpm.setAttribute("cod", "12");
tpm.appendChild(doc.createTextNode("nomeGrupo"));
cadastro.appendChild(tpm);
tpm = doc.createElement("Subgrupo");
tpm.setAttribute("cod", "12");
tpm.appendChild(doc.createTextNode("nomeSubgrupo"));
cadastro.appendChild(tpm);
tpm = doc.createElement("Assunto");
tpm.setAttribute("cod", "100");
tpm.appendChild(doc.createTextNode("NomeAssunto"));
cadastro.appendChild(tpm);
tpm = doc.createElement("periodicidade");
tpm.setAttribute("cod","1000");
tpm.setAttribute("name", "theName");
tpma = doc.createElement("Lay_out");
tpma.appendChild(doc.createTextNode("formatoLayOut"));
tpm.appendChild(tpma);
cadastro.appendChild(tpm);
agrodados.appendChild(cadastro);
doc.appendChild(agrodados);
//Realiza a saida do XML para o console
Transformer trans = TransformerFactory.newInstance().newTransformer();
trans.setOutputProperty(OutputKeys.INDENT, "yes");
trans.transform(new DOMSource(doc), new StreamResult(new FileWriter(new File("c:/teste.xml")))); // vai gerar um arquivo chamado teste.xml na raiz do drive C: do Windows.
doc = null;
trans = null;
doc = builder.newDocument();
trans = TransformerFactory.newInstance().newTransformer();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
Porém o que ocorre é que se eu tento excluir o arquivo (seja manualmente via DELETE do DOS) ou seja via classe File, o sistema operacional me informa que o arquivo está sendo usado.
Por exemplo, se após a última linha do código acima eu fizesse algo assim antes de terminar o método:
File fTemp = new File("c:/teste.xml");
fTemp.delete();
Ele simplesmente não apaga. Se dou um Breakpoint nesse ponto e tento excluir manualmente pelo Windows ele não deixa e diz que o arquivo está sendo usado!
Como poderia proceder para liberar o arquivo XML e poder assim excluí-lo?? Já tentei de tudo por aqui e nada!!
Espero que alguém tenha uma Luz!!
Grande Abraço!
Fabiano