发布网友 发布时间:2022-04-09 04:30
共2个回答
懂视网 时间:2022-04-09 08:52
void addWatcher(String hangqingFolder, String hangqingFile) throws Exception { // watch mask, specify events you care about, // or JNotify.FILE_ANY for all events. int mask = // JNotify.FILE_CREATED | // JNotify.FILE_DELETED | JNotify.FILE_MODIFIED; // 我们只需要注册修改事件 // JNotify.FILE_RENAMED; // watch subtree? boolean watchSubtree = false; // add actual watch watchId = JNotify.addWatch(hangqingFolder, mask, watchSubtree, new JNotifyListener() { public void fileRenamed(int wd, String rootPath, String oldName, String newName) { // do nothing. } public void fileModified(int wd, String rootPath, String name) { if (!hangqingFile.equalsIgnoreCase(name)) //如果是修改的其他文件,则忽略 return; readHangqingFile(hangqingFolder + File.separator + hangqingFile); } public void fileDeleted(int wd, String rootPath, String name) { // do nothing } public void fileCreated(int wd, String rootPath, String name) { // do nothing } }); }
以上代码:
1,我们只要监视文件修改,因此只要设置mask = JNotify.FILE_MODIFIED
2,不需要递归地监视子目录,设置watchSubtree = false
3,由于监视的是文件夹,而不是文件,在fileModified方法中,我们要判断修改的是不是我们关心的文件(即行情文件),如果不是,则忽略。如果是,就调用readHangqingFile开始读取。
JNotify是基于操作系统API实现的,即使用JNI实现的,因此除了jar文件,还包含.dll文件和.so文件。用eclipse开发时,我们需要指定这些本地库的目录,如下图所示:
部署时,需要将本地库放在执行根目录下,或者用-Djava.library.path=/native/library/path 指定本地库的位置。
采用JNotify,用(基于操作系统的)通知而不是轮询,可以非常快地发现文件被更新,根据测试时间<1ms (我觉得应该远小于1ms,但是由于文件修改时间单位是毫秒,没办法更精确的测量)。
待续。。。
Binhua Liu原创文章,转载请注明原地址http://www.cnblogs.com/Binhua-Liu/p/5609396.html
Java读取Level-1行情dbf文件极致优化(1)
标签:
热心网友 时间:2022-04-09 06:00
你是Windows平台下的吗? 如果是,就直接用 jdbc-odbc 来连接算了,起码会少很多奇奇怪怪的问题