问题浮现:

在我使用扫描仪扫描文件传输并把文件存储在计算机上的时候,客户端使用WatcherDir监听创建事件,监听到创建事件就启动上传线程上传此文件,这时springboot 后台报如下错误,分析是因为文件未传输完成,就把文件上传导致上传文件是残缺的

org.apache.commons.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly

因此想到一个办法是,当监听到创建事件时,先判断文件的完整性,不完整就不上传

思路:

隔一秒判断一下文件的大小是否有变化,当newLen 和 oldLen 都不等于0,并且他们的差 等于0的时候,这个时候认为文件写入完成

代码如下:

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 || (newLen == 0 || oldLen == 0)) {
            oldLen = newLen;
            System.out.println(file.length());
            Thread.sleep(10000);
        } else {
            System.out.println("done");
            return true;
        }
    }
}

当我浮现这个现象时,发现当在本地复制文件时,这个判断也不好使,原因不明