Reemplazar la primera línea de un archivo de texto en Java

Tengo un archivo de texto donde quiero cambiar solo la primera línea del archivo. El archivo podría tener millones de filas de longitud, así que preferiría no tener que recorrer todo, así que me pregunto si hay otra forma de hacerlo.

También me gustaría aplicar algunas reglas a la primera línea para que reemplace instancias de ciertas palabras con otras palabras.

es posible?

8

5 Respuestas

Un RandomAccessFile hará el truco, a menos que la longitud de la línea resultante sea diferente de la longitud de la línea original.

Si resulta que está obligado a realizar una copia (donde se reemplaza la primera línea y el resto de los datos se copiarán como están), sugiero usar un BufferedReader y BufferedWriter . Primero use BufferedReader 's readLine() para leer la primera línea. Modifíquelo y escríbalo en el BufferedWriter . Luego use una matriz char [] para realizar una copia de fuerza bruta del resto del archivo. Esto será más eficiente que hacer la copia línea por línea. Avíseme si necesita detalles.

Otra opción es realizar la lectura y la escritura dentro del mismo archivo. Sin embargo, será un poco más complejo. :) Avíseme si necesita detalles sobre esto también ..

15
agregado
¿Pueden ustedes proporcionar cierta información si la longitud de la cadena que se reemplazará es diferente? Es posible sin copiar a un nuevo archivo
agregado el autor png, fuente
Si la longitud es diferente, al menos tendrá que volver a escribir todos los bytes, ya sea en el mismo archivo o en un archivo diferente.
agregado el autor volley, fuente
¿Alguien tiene un ejemplo de código de cómo hacer esto con RandomAccessFile?
agregado el autor jymbo, fuente

Si la nueva línea tiene una cantidad diferente de caracteres (bytes) que la primera línea original, tendrá que volver a escribir todo el archivo para eliminar el espacio o evitar sobrescribir parte de la segunda línea.

Por supuesto, varias herramientas como String.replaceFirst (String regex, String replacement) ( javadoc ) o el RandomAccessFile ( javadoc ) puede ayudarte con esta tarea.

4
agregado

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
agregado

Desea un RandomAccesssFile . Usando el archivo puede leer y escribir donde lo desee en el archivo.

Es muy parecido a un InputStream y OutputStream, pero permite leer y escribir donde lo desee.

2
agregado

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 el archivo como RandomAccessFile. Lee la 1ra línea en una cadena y luego aplica el cambio y luego vuelve a escribir la cadena.

1
agregado
"El archivo podría tener millones de filas" - ¡buena suerte con expresiones regulares! LOL
agregado el autor Vladimir Dyuzhev, fuente
solo si la longitud de la línea 1 no cambia
agregado el autor Cheekysoft, fuente