Java:使用SFTP检查文件是否已完全复制

我有一个轮询器每35秒在某个目录上运行。 这些文件通过SFTP服务器放在此目录中。 问题在于轮询与复制文件的时间冲突。 它还会选择尚未完全复制的不完整文件。

我们可以知道文件的状态,无论是处于复制模式还是复制模式?

文件监视器有几种常见的策略来“知道”文件被完全传输

  1. 轮询时间间隔,如果文件大小在一个间隔内没有变化,则将文件视为完全传输。 例如每1分钟观察一次文件存在。 一旦看到文件存在,就每隔5秒监控一次。 如果文件大小保持不变30秒,则将其视为完全传输。

  2. 传输过程在文件传输后创建标记文件。 例如,在完成传输文件FOO.txt ,创建一个空的FOO.txt.tag 。 您的文件观察者将检查FOO.txt.tag是否存在,一旦它存在,您就知道FOO.txt已被完全转移

  3. 在某些特殊情况下,文件具有特殊格式(例如,特殊页脚行),然后文件观察者可以轮询文件并查看最后一行,并查看它们是否与所需模式匹配

每种方法都有其优点和缺点:

  1. 方法1最少影响转移过程。 有时文件是由第三方传输的,你几乎没有办法告诉他们如方法2那样创建标记文件。但是你可以说这种方法不是100%可靠,特别是在网络不佳的情况下。
  2. 方法2是最可靠的。 但是,如前所述,有些情况下您无法控制转移过程
  3. 方法3仅适用于特殊情况

选择适合您需求的产品

让轮询器文件大小。 如果大小没有从一轮变为下一轮,则文件下载完成。

你能影响SFTP服务器吗? 下载完成后可以创建标记文件(例如’ .thisIsAFile.doc.done ‘)吗?