gpt4 book ai didi

java - 查找和替换文件中的单词/行

转载 作者:IT老高 更新时间:2023-10-28 20:31:52 27 4
gpt4 key购买 nike

我有一个文件(更具体地说,是一个 log4j 配置文件),我希望能够读取该文件并挑选出代码中的某些行并替换它们。例如,在文件中有一个文本字符串,指示它存储的目录或记录器的级别。我希望能够在不读取文件、将其写入另一个文件并删除原始文件的情况下替换这些文本字符串。有没有更有效的方法来使用 Java 查找和替换文件中的文本?

这是我正在尝试使用的文本文件的示例:

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

我希望能够读取文件并将“DEBUG”替换为另一个级别或替换文件目录名称“C:/log.txt”。日志配置文件也是用xml写的。下面是一个例子。

<?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>

我在想这种类型的实现可以使用 HashMap 吗?

最佳答案

任何体面的文本编辑器都具有支持正则表达式的搜索和替换功能。

但是,如果您有理由在 Java 中重新发明轮子,您可以这样做:

Path path = Paths.get("test.txt");
Charset charset = StandardCharsets.UTF_8;

String content = new String(Files.readAllBytes(path), charset);
content = content.replaceAll("foo", "bar");
Files.write(path, content.getBytes(charset));

这仅适用于 Java 7 或更高版本。如果您卡在较旧的 Java 上,您可以这样做:

String content = IOUtils.toString(new FileInputStream(myfile), myencoding);
content = content.replaceAll(myPattern, myReplacement);
IOUtils.write(content, new FileOutputStream(myfile), myencoding);

在这种情况下,您需要添加错误处理并在完成后关闭流。

IOUtils 记录在 http://commons.apache.org/proper/commons-io/javadocs/api-release/org/apache/commons/io/IOUtils.html

关于java - 查找和替换文件中的单词/行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3935791/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com