Java如何删除文本文件中匹配指定姓名的起始到结束整段记录
Java实现删除文本文件中指定姓名对应整段记录
实现思路
- 你的文本每条记录以空行分隔,首行固定为
Name: 姓名格式,所以先按行读取内容,按空行拆分出单条完整记录 - 比对每条记录的首行姓名,匹配到目标姓名就丢弃该记录,其余记录保留
- 先把保留的内容写入临时文件,再替换原文件,避免读取写入同个文件出错,也防止操作失误丢失数据
完整示例代码
import java.io.*; import java.util.Scanner; public class DeleteRecordByName { public static void main(String[] args) { // 原文件路径,可替换为你的文件实际路径 String filePath = "records.txt"; String tempFilePath = "temp_records.txt"; Scanner scanner = new Scanner(System.in); System.out.print("请输入要删除的姓名:"); String targetName = scanner.nextLine().trim(); // 拼接匹配的首行格式 String targetLine = "Name: " + targetName; try ( BufferedReader br = new BufferedReader(new FileReader(filePath)); BufferedWriter bw = new BufferedWriter(new FileWriter(tempFilePath)) ) { String line; // 标记当前遍历的段落是否为要删除的段落 boolean isNeedDelete = false; while ((line = br.readLine()) != null) { // 遇到空行说明上一段记录结束,重置删除标记 if (line.trim().isEmpty()) { // 不是要删除的段落就保留空行,维持原格式 if (!isNeedDelete) { bw.newLine(); } isNeedDelete = false; continue; } // 遇到Name开头的行,判断是否为目标姓名 if (line.startsWith("Name: ")) { isNeedDelete = line.equals(targetLine); } // 不需要删除的行写入临时文件 if (!isNeedDelete) { bw.write(line); bw.newLine(); } } } catch (IOException e) { e.printStackTrace(); return; } // 删除原文件,将临时文件重命名为原文件名 File originalFile = new File(filePath); File tempFile = new File(tempFilePath); if (originalFile.delete()) { tempFile.renameTo(originalFile); System.out.println("操作完成,对应记录已删除"); } else { System.out.println("操作失败,无法修改原文件"); } scanner.close(); } }
注意事项
- 运行前请将代码中
records.txt替换为你本地文本文件的实际路径 - 采用临时文件中转的逻辑不会直接修改原文件,就算中途程序出错也不会丢失原有数据
- 如果你需要留存被删除的记录,只需在判定段落需要删除时,将对应内容单独写入备份文件即可
内容的提问来源于stack exchange,提问作者Leonardo DaFishy
相关产品推荐
相关产品推荐

