I have a file (more specifically, a log4j configuration file) and I want to be able to read in the file and pick out certain lines in the code and replace them. For example, within the file there is a string of text that indicates the directory it is stored in, or the level of the logger. I want to be able to replace those string of text without reading in the file, writing it to another file, and deleting the original file. Is there a more efficient way of doing find and replace texts in a file using Java?
Here is an example of the text file I'm trying to work with:
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 I want to be able to read the file and replace 'DEBUG' with another level or replace the file directory name 'C:/log.txt'. The log configuration file is also written in xml. An example of that is featured below.
<?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> I'm thinking it may be possible to use a hash map for this type of implementation?