arquivo XML:");// System.out.println(xmlOut); // p/ gerar o nome do arquivo Calendar calendar = Calendar.getInstance(); String dataHojeFormatada = calendar.get(calendar.DATE) + "/" + (calendar.get(calendar.MONTH) + 1) + "/" + calendar.get(calendar.YEAR) +" "+ calendar.get(calendar.HOUR_OF_DAY) + ":" + + calendar.get(calendar.MINUTE) + ":" + + calendar.get(calendar.SECOND); String dataNomeArquivo = dataHojeFormatada.replace(" ", "_").replace(":", "_").replace("/", "_"); String nomeArquivo = "contatos_" + dataNomeArquivo + ".xml"; // p/ salvar o arquivo solucao 1// try {// FileOutputStream fs = new FileOutputStream(nomeArquivo);// // xstream.toXML(listaContato, fs);// fs.close();//// System.out.println("Arquivo gerado:" + nomeArquivo);// //abre o arquivo p/ o usuario fora do programa// openFile(new File(nomeArquivo));// } catch (FileNotFoundException ex) {// Logger.getLogger(frameListaContatos.class.getName()).log(Level.SEVERE, null, ex);// } catch (IOException ex) {// Logger.getLogger(frameListaContatos.class.getName()).log(Level.SEVERE, null, ex);//// } // p/ salvar o arquivo solucao 2 try { Writer writer; writer = new FileWriter(nomeArquivo); ObjectOutputStream out = xstream.createObjectOutputStream(writer);//adicionando um header writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); for (Contato C : listaContato) { out.writeObject(C); } out.close(); System.out.println("Arquivo gerado:" + nomeArquivo); openFile(new File(nomeArquivo)); } catch (IOException ex) { Logger.getLogger(frameListaContatos.class.getName()).log(Level.SEVERE, null, ex); } } public void openFile(File document) throws IOException { Desktop dt = Desktop.getDesktop(); dt.open(document); }Observe os importsimport com.thoughtworks.xstream.XStream;import java.awt.Desktop;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.ObjectOutputStream;import java.io.Writer;import java.util.Calendar;import java.util.List;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.JOptionPane;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import springlesson07.dao.ContatoDAO;import springlesson07.model.Contato;import springlesson07.model.ContatoTableModel;import springlesson07.utils.Tema;Figura 13 - Exportando nosso 2o XML observe que o root node e object-stream e adicionamos o cabecalho no XMLe no output temos :run:Sep 24, 2012 12:54:50 PM org.springframework.context.support.AbstractApplicationContext prepareRefreshINFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@669980d5: startup date [Mon Sep 24 12:54:50 BRT 2012]; root of context hierarchy......Gerando arquivo XML:Arquivo gerado:contatos_24_9_2012_13_15_11.xmlArquivo xml contatos_24_9_2012_13_15_11.xml :<?xml version="1.0" encoding="UTF-8"?><object-stream> <contato> <id>3</id> <nome>Cliente 1</nome> <telefone>2222-3333</telefone> </contato> <contato> <id>4</id> <nome>Cliente 2 renomeado de novo</nome> <telefone>4444-5555</telefone> </contato></object-stream>Funcionamento parecido, gerou o arquivo XML , mas dentro de uma tag <object-stream> e adicionamos um header ao arquivoPara deixar esse arquivo XML no jeito faremos uma modificacao em nosso objeto out assim:ObjectOutputStream out = xstream.createObjectOutputStream(writer,"contatos");Teste o programa, e o resultado deve ser :Figura 14 - Exportando nosso 3o XML observe que o root node e contatosArquivo xml contatos_24_9_2012_13_41_9.xml :<?xml version="1.0" encoding="UTF-8"?><contatos> <contato> <id>3</id> <nome>Cliente 1</nome> <telefone>2222-3333</telefone> </contato> <contato> <id>4</id> <nome>Cliente 2 renomeado de novo</nome> <telefone>4444-5555</telefone> </contato></contatos>Agora que ja sabemos como gerar o Arquivo XML corretamente com o header, vamos organizar esse monte de codigoIII) Crie uma nova Classe de nome XmlUtilFigura 15 - Criando uma classe XmlUtil para manipular o XML e organizar melhor o codigoessa classe fica assim : package springlesson07.utils;import com.thoughtworks.xstream.XStream;import java.awt.Desktop;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.ObjectOutputStream;import java.io.Writer;import java.util.Calendar;import java.util.List;import java.util.logging.Level;import java.util.logging.Logger;import springlesson07.model.Contato;public class XmlUtil { private Calendar calendar; private String dataHojeFormatada; private String dataNomeArquivo; private String nomeArquivo; private XStream xstream; public XmlUtil() { // p/ gerar o nome do arquivo no contrutor this.calendar = Calendar.getInstance(); this.dataHojeFormatada = calendar.get(calendar.DATE) + "/" + (calendar.get(calendar.MONTH) + 1) + "/" + calendar.get(calendar.YEAR) + " " + calendar.get(calendar.HOUR_OF_DAY) + ":" + +calendar.get(calendar.MINUTE) + ":" + +calendar.get(calendar.SECOND); this.dataNomeArquivo = dataHojeFormatada.replace(" ", "_").replace(":", "_").replace("/", "_"); this.nomeArquivo = "contatos_" + dataNomeArquivo + ".xml"; this.xstream = new XStream(); } public String getNomeArquivo() { return nomeArquivo; } public void setNomeArquivo(String nomeArquivo) { this.nomeArquivo = nomeArquivo; } public XStream getXstream() { return xstream; } public void setXstream(XStream xstream) { this.xstream = xstream; } public void exportarArquivoContatos(List<Contato> list) { try { System.out.println("Gerando arquivo XML:"); getXstream().alias("contato", Contato.class); Writer