Escrevendo dinamicamente em arquivos! (URGENTE)

Olá!

Preciso saber como posso escrever no meio de um arquivo que já esteja preenchido sem sobrescrever o texto original.

Por exemplo:

[color=blue]
| Arquivo
|
| Isto está escrito
| em um arquivo.
| Não quero
| sobrescrever!! [/color]
[color=black]

Depois, deveria ficar assim: [/color]

[color=blue]
| Arquivo
|
| Isto está escrito
| em um arquivo.[/color]
| [color=red]Quero adicionar
| coisas aqui!!![/color] [color=blue]
| Não quero
| sobrescrever!! [/color]

Alguém sabe isso e pode me ajudar???

[]'s.

Acho que você pode ler o arquivo original em um outro novo, acrescentar as linhas no arquivo novo, continuar com as linhas restantes do arquivo original, salvar o novo arquivo com o nome do arquivo original.

Márcio

Ou melhor ainda, usar a classe RandomAccessFile.

[code] public void ExportaValor (String arquivo) {
try {
FileWriter armazenador = new FileWriter(new File(arquivo),true);
PrintWriter escritor = new PrintWriter(armazenador,true);

        escritor.println("Escrevo a primeira linha,");
        escritor.println("Escrevo a segunda,");
        escritor.println("E por fim a terceira...");

        escritor.close();
        armazenador.close();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
}[/code]

Acho que isso soluciona o seu problema. A grande jogada está em informar true, no FileWriter e PrinterWriter, isso deixa claro que não é para sobrescrever dados já armazenados.

leonardorcortes, neste caso você SÓ pode “apendar” (adicionar no fim) os dados, certo?

Com o RAF que eu falei antes você pode navegar no arquivo.

Certo, não havia me dado conta… Desculpa o mal entendido

Mas eu já estou usando RandomAccessFile e ele está sobrescrevendo as linhas que já estão escritas!!!

E preciso tirar medidas de tempo, então é muita perda de processamento escrever em dois arquivos…

Alguma idéia???

[]'s!

acho que o jeito é ter o arquivo em memória (StringBuffer) e trabalhar com ele assim… E de tempo vc grava em disco.

Sugestao: de uma boooooooooooooooa lida nos JavaDocs do pacote java.io :wink:

Uma boa dica é perguntar como é que um editor de texto (por exemplo, o Notepad ou o UltraEdit) trata esse tipo de coisas, já que ele precisa fazer exatamente isso (inserir e remover linhas).
Se o editor for bastante ingênuo, como o Notepad, ele carrega o arquivo inteiro (é rápido se o arquivo for pequeno), você modifica o arquivo, e depois o arquivo é gravado por inteiro.
Se você tiver um editor de texto como o Ultraedit, ele copia o seu arquivo para um arquivo temporário, e se esse arquivo temporário for relativamente pequeno (menor que alguma limitação do Sistema Operacional, tipicamente 1GB ou 2GB), ele pode ser mapeado em memória e tratado mais ou menos como se fosse uma região contígua de memória. Digo “mais ou menos” porque isso também não é verdade. Para evitar grandes movimentações de memória (que seriam refletidas em grandes quantidades de leituras e escritas no disco), normalmente as regiões de memória são segmentadas em blocos, e há um tratamento bastante sofisticado desses blocos.
Ou seja, o mais fácil é ter os seus dados em memória, e gravar de vez em quando. Resta saber quantos dados você pode guardar na memória…