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]
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.
[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.
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…