所以我的方案如下:
我有一个目录,每隔X秒,一个Java应用程序轮询该目录以查看是否添加了任何新文件。如果检测到一个新文件(可以通过未知的FTP实现在那里传输),我想查看该文件以查看它是否以特定字符串结尾(即“allData”)。如果该字符串存在,我将开始根据我的需要解析它,因为该文件被认为已成功传输。
所以问题是正在传输的文件可能非常大(几GB),我不希望在整个文件完全传输之前启动解析(由结尾的“allData”字符串表示) 。当我想查看该字符串的文件时,搜索必须快速且内存消耗低。由于这个原因,我使用RandomAccessFile对象(只读模式),它将文件描述符设置为非常靠近文件的末尾,然后我开始使用该FD和BufferedReader进行搜索。
我的问题是我在Java应用程序中打开文件是否会影响正在执行的文件传输。因为可能是在传输文件之前应用程序开始读取(以确定是否已传输整个文件)的情况。在这样的实现中是否会发生任何令人讨厌的事情?
答案 0 :(得分:2)
我只是让远程端使用ftp传输文件,然后让远程端重命名文件来自" filename.file.incomplete" to" filename.file" ,然后你可以轮询没有"不完整"到底。