Substituir a primeira linha de um arquivo de texto em Java

Eu tenho um arquivo de texto onde eu quero mudar apenas a primeira linha do arquivo. O arquivo pode ter milhões de linhas, então eu prefiro não ter que passar por cima de tudo, então eu estou querendo saber se existe outra maneira de fazer isso.

Também gostaria de aplicar algumas regras à primeira linha para substituir as ocorrências de certas palavras por outras palavras.

Isso é possível?

8

5 Respostas

Um RandomAccessFile fará o truque, a menos que o comprimento da linha resultante seja diferente do comprimento da linha original.

Se você for forçado a fazer uma cópia (onde a primeira linha é substituída e o resto dos dados deve ser copiado como está), sugiro usar um BufferedReader e BufferedWriter . Primeiro, use o BufferedReader ' readLine() para ler a primeira linha. Modifique-o e grave-o no BufferedWriter . Em seguida, use uma matriz char [] para executar uma cópia de força bruta do restante do arquivo. Isso será mais eficiente do que fazer a cópia linha por linha. Deixe-me saber se você precisa de detalhes.

Outra opção é realizar a leitura e escrita dentro do mesmo arquivo. Vai ser um pouco mais complexo, no entanto. :) Deixe-me saber se você precisar de detalhes sobre isso também ..

15
adicionado
Você pode pls fornecer algumas informações se o comprimento da seqüência a ser substituído é diferente. É possível sem copiar para um novo arquivo
adicionado o autor png, fonte
Se o tamanho for diferente, você terá que reescrever todos os bytes, no mesmo arquivo ou em um arquivo diferente.
adicionado o autor volley, fonte
Alguém tem um exemplo de código de como fazer isso com RandomAccessFile?
adicionado o autor jymbo, fonte

Se a nova linha tiver uma quantidade diferente de caracteres (bytes) que a primeira linha original, você terá que reescrever o arquivo inteiro para se livrar da lacuna ou evitar a substituição de parte da segunda linha.

Claro, várias ferramentas como String.replaceFirst (String regex, substituição de String) ( javadoc ) ou o RandomAccessFile ( javadoc ) pode ajudá-lo nessa tarefa.

4
adicionado

Why not write a Perl script and invoke it using Runtime.exec(). Not a pure java solution though. Also have a look at this article before going deep http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

4
adicionado

Você deseja um RandomAccesssFile . Usando o arquivo, você pode ler e escrever onde quiser no arquivo.

É muito parecido com um InputStream e OutputStream, mas permite ler e escrever onde quiser.

2
adicionado

apply a regex only once. String.replaceFirst("regex", "replacementstring") : http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#replaceFirst(java.lang.String,%20java.lang.String)

Abra o arquivo como RandomAccessFile. Leia a 1ª linha em uma string e depois aplique a mudança e depois escreva a string de volta.

1
adicionado
"O arquivo pode ter milhões de linhas" - boa sorte com regexps! RI MUITO
adicionado o autor Vladimir Dyuzhev, fonte
somente se o comprimento da linha 1 não mudar
adicionado o autor Cheekysoft, fonte