Ich habe eine Datei (genauer gesagt, eine Log4j-Konfigurationsdatei) und ich möchte in der Lage sein, die Datei einzulesen und bestimmte Zeilen im Code auszuwählen und sie zu ersetzen. Zum Beispiel gibt es in der Datei eine Textzeichenfolge, die das Verzeichnis angibt, in dem sie gespeichert ist, oder die Ebene des Loggers. Ich möchte in der Lage sein, diese Textzeichenfolge zu ersetzen, ohne die Datei einzulesen, in eine andere Datei zu schreiben und die Originaldatei zu löschen. Gibt es eine effizientere Möglichkeit, Texte in einer Datei mithilfe von Java zu suchen und zu ersetzen? HierSuchen und Ersetzen von Wörtern/Zeilen in einer Datei
ist ein Beispiel für die Textdatei versuche ich zu arbeiten, mit:
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
ich mit einer anderen Ebene die Datei zu lesen und ersetzen ‚DEBUG‘ in der Lage sein wollen, oder die Datei Verzeichnisnamen ersetzen 'C: /log.txt'. Die Protokollkonfigurationsdatei wird ebenfalls in XML geschrieben. Ein Beispiel dafür ist unten aufgeführt.
<?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>
Ich denke, es ist möglich, eine Hash-Map für diese Art der Implementierung zu verwenden?
Was ist mit dem Schließen der FileInputStream & FileOutputStream? –
Das ist eine Übung für den Leser (siehe den Satz nach dem Codebeispiel). – meriton
Sie laden die gesamte Datei in den Speicher, was in diesem Fall wahrscheinlich sicher ist. Aber was ist mit größeren Dateien (z. B. 2 GB)? Die schwierige (aber richtige Sache) ist das Streaming der Datei von der Quelle zum Ziel, denke ich. – bvdb