java文本替换工具用inputstreamreader/outputstreamwriter指定utf-8字符集读写,bufferedreader/bufferedwriter逐行处理,replace()字面量替换防正则误用,write()+newline()保留换行,临时文件+files.move()原子覆盖,自动关闭资源防泄漏。

用 Java 字符流实现简易文本替换工具,核心是用 InputStreamReader 和 OutputStreamWriter 读写文本,配合 BufferedReader/BufferedWriter 提升效率,逐行读取、替换字符串后写入新文件(或覆盖原文件)。关键在于避免乱码、正确处理换行、安全关闭资源。
读取并逐行替换文本内容
使用 BufferedReader 包装 InputStreamReader,指定字符集(如 UTF-8),防止中文乱码;每读一行就调用 String.replace() 或 String.replaceAll() 替换目标字符串:
- 推荐用
replace(CharSequence, CharSequence)做字面量替换(不走正则),更安全直观 - 若需忽略大小写或复杂匹配,再考虑
replaceAll()+ 正则,但注意转义特殊字符 - 保留原始换行符:
readLine()会自动去掉换行符,写入时需手动加System.lineSeparator()
写入替换后的内容到新文件
用 BufferedWriter 包装 OutputStreamWriter,同样指定相同字符集;每次替换完一行就写入,避免全加载进内存:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 不要直接写原文件——先写入临时文件,替换完成后用
Files.move()原子替换,防止出错丢数据 - 写入前可创建目标目录:
Files.createDirectories(Paths.get(outputPath).getParent()) - 记得调用
flush()确保缓冲区内容落盘
完整示例代码(含资源自动关闭)
以下是一个健壮、可直接运行的命令行工具片段:
public static void replaceInFile(String inputPath, String outputPath,
String target, String replacement) throws IOException {
Path input = Paths.get(inputPath);
Path output = Paths.get(outputPath);
try (BufferedReader reader = Files.newBufferedReader(input, StandardCharsets.UTF_8);
BufferedWriter writer = Files.newBufferedWriter(output, StandardCharsets.UTF_8)) {
String line;
while ((line = reader.readLine()) != null) {
writer.write(line.replace(target, replacement));
writer.newLine(); // 跨平台换行
}
}
// 可选:覆盖原文件(谨慎!)
// Files.move(output, input, StandardCopyOption.REPLACE_EXISTING);
}
调用方式:replaceInFile("in.txt", "out.txt", "old", "new")
注意事项与常见问题
实际使用中容易踩坑的地方:
- 字符集必须统一:读和写的
Charset一致,否则中文变问号或乱码 - 路径含中文或空格?用
Paths.get(...)处理,比直接传String更可靠 - 大文件?当前逐行方案内存友好;若需全文替换(如含跨行匹配),就得用其他策略(如正则匹配整个文本),但慎用于超大文件
- 想支持正则替换?把
line.replace()换成line.replaceAll(Pattern.quote(target), Matcher.quoteReplacement(replacement)),避免正则元字符误触发
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










