From 87b2ea6a1165466d01f54850d793e39fc964ac6e Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Fri, 23 Jan 2026 10:42:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=9F=E6=88=90=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=96=87=E4=BB=B6=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bocai.db | Bin 122880 -> 122880 bytes .../tem/bocai/schedules/CrawlerSchedule.java | 2 +- .../bocai/util/LotteryWebMagicCrawler.java | 22 +++++++++++++++--- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/bocai.db b/bocai.db index 05bb215a011a72138ee044a86248d8f126f3a0e8..6ddebec6407685c844e680269ec0ba8c0fcb26a7 100644 GIT binary patch delta 12358 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 N$3}^ZH+P7d{{|t2Ww!tT delta 12099 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 ZVrA~b@%Gxe6M> resultList) { + public static void writeToJsonFile(List> resultList) { try { // 创建 ObjectMapper 实例 ObjectMapper objectMapper = new ObjectMapper(); @@ -246,9 +247,13 @@ public class LotteryWebMagicCrawler implements PageProcessor { // 设置 JSON 格式化(可选,更易读) objectMapper.enable(SerializationFeature.INDENT_OUTPUT); - // 定义输出目录和文件名 + // 定义输出目录 String directoryPath = "output/json"; // 项目根目录下的 output/json 文件夹 - String fileName = "result_" + System.currentTimeMillis() + ".json"; + + // 使用年月日作为文件名(格式:result_yyyyMMdd.json) + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); + String dateStr = dateFormat.format(new Date()); + String fileName = "result_" + dateStr + ".json"; String filePath = directoryPath + "/" + fileName; // 创建目录(如果不存在) @@ -256,8 +261,19 @@ public class LotteryWebMagicCrawler implements PageProcessor { if (!directory.exists()) { directory.mkdirs(); // 创建多级目录 } + // 创建文件对象 File outputFile = new File(filePath); + + // 如果文件已存在,删除旧文件(实现替换功能) + if (outputFile.exists()) { + boolean deleted = outputFile.delete(); + if (!deleted) { + throw new IOException("无法删除已存在的文件: " + filePath); + } + System.out.println("已删除旧文件,准备创建新文件: " + fileName); + } + // 将 List 写入 JSON 文件 objectMapper.writeValue(outputFile, resultList); System.out.println("数据已成功写入文件: " + outputFile.getAbsolutePath());