2008-10-14 13 views
8

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

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

¿Esto es posible?

Respuesta

15

A 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 escritura dentro del mismo archivo. Sin embargo, será un poco más complejo. :) Avíseme si necesita detalles sobre esto también ...

+0

¿Por favor puede proporcionar cierta información si la longitud de la cadena que se reemplazará es diferente. Es posible sin copiar a un nuevo archivo – png

+0

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

+0

¿Alguien tiene un ejemplo de código de cómo hacer esto con RandomAccessFile? – jymbo

2

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

1

aplicar una expresión regular solo una vez. 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.

+0

solo si la longitud de la línea 1 no cambia – Cheekysoft

+0

"El archivo podría tener millones de filas de longitud" - ¡buena suerte con expresiones regulares! LOL –

3

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 RandomAccessFile (javadoc) pueden ayudarlo con esta tarea.

Cuestiones relacionadas