Otimizar gravação de arquivos no HD

Fala galera,
gostaria de pedir ajuda(Mais uma vez) de vocês para um problema no meu programa.

Tenho um método que recebe registros(Milhões) de uma tabela do banco de dados, os posiciona e grava em um arquivo .txt

Por exemplo:


public void appendXml(JTable table, Extrator extrator, String query, String arquivo, File arquivoSalvo) throws IOException {
        int linhas = table.getRowCount();
        Cifrador cif = new Cifrador();

        StringBuilder xml = new StringBuilder("<?xml version='1.0' encoding='iso-8859-1'?>");
        xml.append("<extraidb versao='2'>").append("\n");
        xml.append("<conexao>").append("\n");
        xml.append("<alias>").append("\n");
        xml.append(extrator.getAlias()).append("\n");
        xml.append("</alias>").append("\n");
        xml.append("</conexao>").append("\n");
        xml.append("<query>").append("\n");
        xml.append("<![CDATA[");
        xml.append(query);
        xml.append("]]>").append("\n");
        xml.append("</query>").append("\n");
        xml.append("<output>").append("\n");
        xml.append("<path>").append("\n");
        xml.append(arquivo).append("\n");
        xml.append("</path>").append("\n");

        for (int i = 0; i < linhas; i++) {

            xml.append("<col id='").append(table.getValueAt(i, 0)).append("'>\n");
            xml.append("<largura>").append("\n");
            xml.append(table.getValueAt(i, 1)).append("\n");
            xml.append("</largura>").append("\n");
            xml.append("<decimais>").append("\n");
            xml.append(table.getValueAt(i, 2)).append("\n");
            xml.append("</decimais>").append("\n");
            xml.append("<tipo>").append("\n");
            xml.append(buscaIndex(table.getValueAt(i, 3))).append("\n");
            xml.append("</tipo>").append("\n");
            xml.append("</col>").append("\n");
        }
        xml.append("</output>").append("\n");
        xml.append("</extraidb>").append("\n");


        FileWriter fw = new FileWriter(arquivoSalvo);
        fw.write(xml.toString());
        fw.close();

Porém, o tempo de demora está muito elevado. Ja tentei com String Builder(Como podem ver) e mesmo assim não melhorou muita coisa.

Desde já obrigado!

Que mania o pessoal tem de criar uma string gigante e tentar gravá-la de uma vez só!

Basta ir gravando (usando um new PrintWriter (new BufferedWriter (new FileWriter(“nome do arquivo”)))) as coisas à medida que você vai precisando,sem montar uma string gigante.

Bom, a idéia seria + - essa. A cada 100.000 registros lidos eu iria jogando no txt. Mas como java não é das minhas especialidades estou esbarrando em problemas técnicos. Poderia me dar uma luz? Obrigado!

O codigo abaixo cria um arquivo texto com 100 linhas, cada qual tendo um número. Acho que você vai entender como é que funciona.

PrintWriter pw = new PrintWriter (new BufferedWriter (new FileWriter ("arquivo.txt")));
for (int i = 1; i <= 100; i++) {
    pw.println (i);
}
pw.close();

Quer algo mais simples?

Amigo não me leve a mal, mas este exemplo não ajudou muito não. Eu tenho que gravar os registros, de um table, de maneira contínua em um txt. O problema é jogar esses milhões de registros de uma só vez no HD. A idéia seria fazer um “Swapping”, sei lá.