Tengo un archivo (más específicamente, un archivo de configuración log4j) y deseo poder leer en el archivo y seleccionar ciertas líneas en el código y reemplazarlas. Por ejemplo, dentro del archivo hay una cadena de texto que indica el directorio en el que está almacenado, o el nivel del registrador. Quiero poder reemplazar esa cadena de texto sin leer el archivo, escribirlo en otro archivo y eliminar el archivo original. ¿Hay una forma más eficiente de buscar y reemplazar textos en un archivo usando Java?Buscar y reemplazar palabras/líneas en un archivo
Aquí se muestra un ejemplo del archivo de texto que estoy tratando de trabajar con:
log4j.rootLogger=DEBUG, A0
log4j.appender.A0=org.apache.log4j.RollingFileAppender
log4j.appender.A0.File=C:/log.txt
log4j.appender.A0.MaxFileSize=100KB
log4j.appender.A0.MaxBackupIndex=1
log4j.appender.A0.layout=org.apache.log4j.RollingFileAppender
log4j.appender.A0.layout.ConversionPattern=%-4r [%t] %-5p: %c %x - %m%n
Quiero ser capaz de leer el archivo y reemplazar 'debug' con otro nivel o sustituir el nombre del directorio de archivos 'C: /log.txt'. El archivo de configuración de registro también está escrito en xml. Un ejemplo de eso se presenta a continuación.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<appender class="org.apache.log4j.RollingFileAppender" name="A0">
<param name="append" value="false"/>
<param name="File" value="C:/log/.txt"/>
<param name="MaxBackupIndex" value="1"/>
<param name="MaxFileSize" value="100KB"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-4r [%t] %-5p: %c %x - %m%n"/>
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="A0"/>
</root>
</log4j:configuration>
¿Estoy pensando que es posible utilizar un mapa hash para este tipo de implementación?
¿Qué pasa con el cierre de FileInputStream y FileOutputStream? –
Eso se deja como un ejercicio para el lector (vea la oración después de la muestra del código). – meriton
Está cargando todo el archivo en la memoria, que probablemente sea seguro en este caso. Pero, ¿qué pasa con los archivos más grandes (por ejemplo, 2 GB)? Lo difícil (pero correcto de hacer) es transmitir el archivo desde el origen al destino, creo. – bvdb