java判断文件是否正在写入

Flink批处理时,遇到一个场景:flink在分析日志文件时,如果日志文件已经存在,flink则会正确读取并分析日志文件。这里问什么说正确读取呢?假设,日志文件很大,大到100M,在慢网络情况下,将日志文件发送到slave节点分析,那么,是不是会存在这么一种情况,文件还在传输,而flink程序却已发现有新日志文件,并将其转移到了工作目录进行下一步分析。那结果是不是,程序正在分析的文件,只是部分日志文件,得到的结果,也只是一部分,不准确的结果呢?所以这种情况下就需要知道,该文件是不是正在传输中,如果不是,则拿走分析,如果是,则继续等待传输结束。下面的方法,则是过一定时间,去检查一下,文件是否有新内容写入,在正常网络下,写入状态是不间断的,如果当前文件内容长度与上一次检查的文件长度一样,并没有改变,则判断该文件已传输完成。方法如下,仅供借鉴。当然还有其他方法可行,仁者见仁,智者见智了。

public static boolean checkFileWritingOn(String fileName) throws Exception{
    long oldLen = 0;
    long newLen = 0;
    File file = new File(fileName);
    while(true){
        newLen = file.length();
        if ((newLen - oldLen) > 0) {
            oldLen = newLen;
            System.out.println(file.length());
            Thread.sleep(10000);
        } else {
            System.out.println("done");
            return true;
        }
    }
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值