问题浮现:
在我使用扫描仪扫描文件传输并把文件存储在计算机上的时候,客户端使用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;
}
}
}
当我浮现这个现象时,发现当在本地复制文件时,这个判断也不好使,原因不明