You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何等待JSON文件生成就绪后再执行转Excel的操作?

如何等待JSON文件生成就绪后再执行转Excel的操作?

嘿,我来帮你搞定这个问题!你现在的代码直接去读取JSON文件,但如果其他生成文件的方法还没跑完,文件要么不存在,要么内容不完整,肯定会导致转换失败对吧?咱们可以给代码加一段等待文件就绪的逻辑,确保文件完全生成好之后再执行Excel转换。

下面是修改后的完整代码,我会把新增的部分标出来,你一看就懂:

public class converter2_ES {

    @Test
    public void main() throws Exception {
        String jsonFilePath = ".//json_files//elastic_search.json";
        // 新增:等待文件就绪,这里设置超时10分钟,每2秒检查一次
        waitForFileReady(jsonFilePath, 10 * 60 * 1000, 2000);

        LocalDateTime date = LocalDateTime.now();
        DateTimeFormatter dateformat = DateTimeFormatter.ofPattern("dd-MM-yyyy HH-mm-ss");
        String formatedate = date.format(dateformat);

        Workbook workbook = new Workbook(jsonFilePath);
        workbook.save(".//Excel_files//es_files//ES-" + formatedate + ".xlsx");

        System.out.println("Elastic_search json file converted successfully");
    }

    // 新增:专门用来等待文件就绪的工具方法
    private void waitForFileReady(String filePath, long timeoutMillis, long checkIntervalMillis) throws InterruptedException {
        File jsonFile = new File(filePath);
        long startTime = System.currentTimeMillis();
        
        while (true) {
            // 第一步:检查文件是否存在且不为空
            if (jsonFile.exists() && jsonFile.length() > 0) {
                // 第二步:确认文件内容已经写完(大小不再变化)
                Thread.sleep(500);
                File checkFile = new File(filePath);
                if (checkFile.length() == jsonFile.length()) {
                    System.out.println("JSON文件已就绪,开始转换...");
                    break;
                }
                // 如果大小变了,更新文件对象继续等
                jsonFile = checkFile;
            }
            
            // 第三步:防止无限等待,超时就抛出异常
            if (System.currentTimeMillis() - startTime > timeoutMillis) {
                throw new RuntimeException("等待JSON文件就绪超时啦!路径:" + filePath);
            }
            
            // 每隔一段时间检查一次,别太频繁占用资源
            Thread.sleep(checkIntervalMillis);
        }
    }
}

我再给你拆解下这段逻辑的核心点:

  • 双重确认文件完整性:不光检查文件存在,还要等文件大小稳定——毕竟有时候文件创建了,但其他进程还在往里面写数据,这时候读会拿到不完整的JSON,肯定转失败。
  • 超时保护:设置了10分钟的超时时间(你可以根据实际情况调整),要是超过这个时间文件还没好,直接抛异常,方便你排查是生成文件的方法出问题了还是其他原因。
  • 合理的检查间隔:每2秒检查一次,既不会太频繁浪费CPU,也不会错过文件生成的时机。

你可以根据自己的实际需求调整超时时间和检查间隔,比如如果生成文件很快,就把间隔调短一点,超时时间也可以设得小一些~

备注:内容来源于stack exchange,提问作者Ramesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:43:15