Escrevendo dinamicamente em arquivos!!! (URGENTE)  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
tecko
Thread.start()

Membro desde: 10/07/2004 13:26:04
Mensagens: 27
Offline

Olá!

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

Por exemplo:


| Arquivo
|
| Isto está escrito
| em um arquivo.
| Não quero
| sobrescrever!!



Depois, deveria ficar assim:



| Arquivo
|
| Isto está escrito
| em um arquivo.

| Quero adicionar
| coisas aqui!!!!!

| Não quero
| sobrescrever!!


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

[]'s.
marcioa1
Virtual Machine Man
[Avatar]

Membro desde: 29/11/2003 12:52:10
Mensagens: 736
Localização: Valinhos-SP
Offline

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

SCJP 1.4,
[Email]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Ou melhor ainda, usar a classe RandomAccessFile.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
leonardorcortes
HelloWorld
[Avatar]

Membro desde: 29/03/2005 14:51:19
Mensagens: 12
Localização: Porto Alegre - RS
Offline



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.
[WWW] [MSN] [ICQ]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

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.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
leonardorcortes
HelloWorld
[Avatar]

Membro desde: 29/03/2005 14:51:19
Mensagens: 12
Localização: Porto Alegre - RS
Offline

Certo, não havia me dado conta... Desculpa o mal entendido
[WWW] [MSN] [ICQ]
tecko
Thread.start()

Membro desde: 10/07/2004 13:26:04
Mensagens: 27
Offline

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!
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

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

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

Sugestao: de uma boooooooooooooooa lida nos JavaDocs do pacote java.io
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

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...


[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team