java判断文件是否正在写入

来源:互联网 发布:电脑网络重置命令 编辑:程序博客网 时间:2024/06/15 23:26

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;        }    }}
原创粉丝点击