- 浏览: 2148929 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
继昨天的NIO文件夹遍历,散仙今天要分享另外两个基于NIO的比较实用的知识,第一个分享的是使用NIO对操作系统的文件进行监控,第二个要分享的是关于操作系统的文件锁,(散仙:这个会放在下一篇博客中)。
在Java以前的版本中,如果程序想要监控文件的变化,则可以采用启动一条后台线程,定时去扫描某个文件夹,或某个文件夹下的文件,如果扫描过程中发现此次的遍历结果与上次的结果不同,则认为此文件发生了变化,当然你还得考虑怎么临时存储上一次文件的改动情况,这种方式不仅,十分繁琐而且性能也不好。
现在,在我们的NIO2里面,则提供了更为轻巧方便的监控策略,下面散仙给出一些API,以供参考:
下面,散仙给出示例源码:
运行,效果如下:
截图如下:
至此,我们的一个小型监控项目就完成了,这个技术在很多时候,都非常有用,例如一些主从架构的数据同步的场景,Master数据状态改变了,然后就可以立即同步到Slave里,这其实就跟文件系统监控的原理差不多。文件系统的监控不仅要求可靠性高,而且还得简单,好用,说到这里,不得不提下,我们分布式环境下经常用到的一个集群协作服务Zookeeper,当然zookeeper的实现原理,比我们这个小技术要复杂多了,其中的一些leader选举算法,状态一致算法都是非常复杂的,不过zookeeper的对外API提供的非常短小简单,它的安装部署也是非常容易的,有兴趣的朋友可以深入的研究一下。
远程的应该是软连接的形式吧
加油!
你们用来做什么的啊
FTP 文件监控
那不错啊,复杂不
你们用来做什么的啊
FTP 文件监控
你们用来做什么的啊
在Java以前的版本中,如果程序想要监控文件的变化,则可以采用启动一条后台线程,定时去扫描某个文件夹,或某个文件夹下的文件,如果扫描过程中发现此次的遍历结果与上次的结果不同,则认为此文件发生了变化,当然你还得考虑怎么临时存储上一次文件的改动情况,这种方式不仅,十分繁琐而且性能也不好。
现在,在我们的NIO2里面,则提供了更为轻巧方便的监控策略,下面散仙给出一些API,以供参考:
类或接口 | 方法名 | 作用 |
Path | register(WatchService watcher, WatchEvent.Kind<?>... events) | 用watcher监听该path代表的目录下的变化,events参数指定监听那些类型的时间 |
WatchService | close() | 关闭监听服务 |
WatchService | poll() | 获取下一个WatchKey,如果没有则立即返回null |
WatchService | poll(long timeout, TimeUnit unit) | 定时访问下一个WatchKey |
WatchService | take() | 如果没有WatchKey发生,就一直处于监听状态 |
WatchEvent | context() | 返回监听的上下文 |
WatchEvent | count() | 该事件发生的次数 |
WatchEvent | kind() | 发生的具体操作 |
下面,散仙给出示例源码:
package com.watchservice; import java.nio.file.FileSystems; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardWatchEventKinds; import java.nio.file.WatchEvent; import java.nio.file.WatchKey; import java.nio.file.WatchService; /*** * * @author 秦东亮 * 实时监控某个目录 * * **/ public class MyWatchService { public static void main(String[] args)throws Exception { //获取当前文件系统的WatchService监控对象 WatchService watchService=FileSystems.getDefault().newWatchService(); //监听的事件类型,有创建,删除,以及修改 Paths.get("E:\\测试java监听").register(watchService, StandardWatchEventKinds.ENTRY_CREATE,StandardWatchEventKinds.ENTRY_DELETE,StandardWatchEventKinds.ENTRY_MODIFY,StandardWatchEventKinds.OVERFLOW); while(true){ //获取下一个文件变化事件 WatchKey key=watchService.take(); for(WatchEvent<?> event:key.pollEvents()){ System.out.println(event.context()+"文件发生了"+event.kind()+"事件"+"此事件发生的次数: "+event.count()); } //重设WatchKey boolean valid=key.reset(); //监听失败,退出监听 if(!valid){ break; } } } }
运行,效果如下:
新建文件夹文件发生了ENTRY_CREATE事件此事件发生的次数: 1 新建 Microsoft Excel 工作表.xlsx文件发生了ENTRY_CREATE事件此事件发生的次数: 1 新建 Microsoft Excel 工作表.xlsx文件发生了ENTRY_MODIFY事件此事件发生的次数: 1 新建 Microsoft Excel 工作表.xlsx文件发生了ENTRY_MODIFY事件此事件发生的次数: 1 新建 Microsoft Excel 工作表.xlsx文件发生了ENTRY_MODIFY事件此事件发生的次数: 1 新建 Microsoft Excel 工作表 (2).xlsx文件发生了ENTRY_CREATE事件此事件发生的次数: 1 新建 Microsoft Excel 工作表 (2).xlsx文件发生了ENTRY_MODIFY事件此事件发生的次数: 1 新建 Microsoft Excel 工作表 (2).xlsx文件发生了ENTRY_MODIFY事件此事件发生的次数: 1 新建 Microsoft Excel 工作表 (2).xlsx文件发生了ENTRY_MODIFY事件此事件发生的次数: 1 新建 Microsoft Excel 工作表 (2).xlsx文件发生了ENTRY_DELETE事件此事件发生的次数: 1
截图如下:
至此,我们的一个小型监控项目就完成了,这个技术在很多时候,都非常有用,例如一些主从架构的数据同步的场景,Master数据状态改变了,然后就可以立即同步到Slave里,这其实就跟文件系统监控的原理差不多。文件系统的监控不仅要求可靠性高,而且还得简单,好用,说到这里,不得不提下,我们分布式环境下经常用到的一个集群协作服务Zookeeper,当然zookeeper的实现原理,比我们这个小技术要复杂多了,其中的一些leader选举算法,状态一致算法都是非常复杂的,不过zookeeper的对外API提供的非常短小简单,它的安装部署也是非常容易的,有兴趣的朋友可以深入的研究一下。
评论
12 楼
欧阳鹏
2015-05-14
楼主我想问下,为什么我按照你的脚本执行时候,对文件的更新操作,ENTRY_MODIFY事件此事件发生的次数: 2
让人好费解
让人好费解
11 楼
heipacker
2014-07-08
jdk版本?专业点啊楼主
10 楼
qindongliang1922
2014-04-18
jack2code1 写道
求教:如果监控的是一个远程网络位置(映射远程主机的目录到本地磁盘,例如:H:\),此时无法注册监控事件。
远程的应该是软连接的形式吧
9 楼
jack2code1
2014-04-18
求教:如果监控的是一个远程网络位置(映射远程主机的目录到本地磁盘,例如:H:\),此时无法注册监控事件。
8 楼
jack2code1
2014-04-18
Exception in thread "Thread-0" java.lang.AssertionError: Should not get here
at sun.nio.fs.WindowsFileAttributes.volSerialNumber(WindowsFileAttributes.java:387)
at sun.nio.fs.WindowsWatchService$Poller.implRegister(WindowsWatchService.java:361)
at sun.nio.fs.AbstractPoller.processRequests(AbstractPoller.java:260)
at sun.nio.fs.WindowsWatchService$Poller.run(WindowsWatchService.java:531)
at java.lang.Thread.run(Thread.java:722)
at sun.nio.fs.WindowsFileAttributes.volSerialNumber(WindowsFileAttributes.java:387)
at sun.nio.fs.WindowsWatchService$Poller.implRegister(WindowsWatchService.java:361)
at sun.nio.fs.AbstractPoller.processRequests(AbstractPoller.java:260)
at sun.nio.fs.WindowsWatchService$Poller.run(WindowsWatchService.java:531)
at java.lang.Thread.run(Thread.java:722)
7 楼
qindongliang1922
2013-11-28
pi88dian88 写道
学到了很不错的东西
加油!
6 楼
pi88dian88
2013-11-28
学到了很不错的东西
5 楼
manong_java
2013-11-27
还好 不复杂,最近也把java并发包的部分 弄进去了 不过还不熟练 凑合着用吧 哈哈
4 楼
qindongliang1922
2013-11-27
manong_java 写道
qindongliang1922 写道
manong_java 写道
哈哈 这个功能 在项目里已经用了
你们用来做什么的啊
FTP 文件监控
那不错啊,复杂不
3 楼
manong_java
2013-11-27
qindongliang1922 写道
manong_java 写道
哈哈 这个功能 在项目里已经用了
你们用来做什么的啊
FTP 文件监控
2 楼
qindongliang1922
2013-11-27
manong_java 写道
哈哈 这个功能 在项目里已经用了
你们用来做什么的啊
1 楼
manong_java
2013-11-27
哈哈 这个功能 在项目里已经用了
发表评论
-
记一次log4j不打印日志的踩坑记
2019-09-22 01:58 1466### 起因 前几天一个跑有java应用的生产集群(200多 ... -
在Java里面如何解决进退两难的jar包冲突问题?
2019-07-23 19:10 1146如上图所示: es api组件依赖guava18.0 ... -
如何轻松理解二叉树的深度遍历策略
2019-07-03 23:33 1027我们知道普通的线性数据结构如链表,数组等,遍历方式单一 ... -
为什么单线程Redis性能也很出色
2019-01-21 18:02 2136高性能的服务器,不一 ... -
如何将编程语言里面的字符串转成数字?
2019-01-11 23:23 1999将字符串转成数字在很 ... -
为什么Java里面String类是不可变的
2019-01-06 18:36 1593在Java里面String类型是不可变对象,这一点毫无疑问,那 ... -
关于Java里面volatile关键字的重排序
2019-01-04 18:49 990Java里面volatile关键字主 ... -
多个线程如何轮流打印ABC特定的次数?
2018-12-11 20:42 5934之前的一篇文章,我给 ... -
聊聊Java里面的引用传递
2018-11-16 21:21 941长久以来,在Java语言里面一直有一个争论,就是Java语言到 ... -
理解计数排序算法的原理和实现
2018-10-11 10:03 2050计数排序(Counting sort) ... -
理解Java7和8里面HashMap+ConcurrentHashMap的扩容策略
2018-09-06 11:31 3344### 前言 理解HashMap和Con ... -
关于Java里面多线程同步的一些知识
2018-07-18 09:45 1067# 关于Java里面多线程同步的一些知识 对于任何Java开 ... -
Java单例模式之双检锁深入思考
2018-07-08 12:25 3247# Java单例模式之双检锁 ... -
关于Java里面多线程同步的一些知识
2018-07-08 12:23 1087# 关于Java里面多线程同步的一些知识 对于任何Java开 ... -
重新认识同步与异步,阻塞和非阻塞的概念
2018-07-06 14:30 1430# 重新认识同步与异步 ... -
线程的基本知识总结
2018-06-27 16:27 1022### (一)创建线程的方式 (1)实现Runnable接口 ... -
Java里面volatile关键字修饰引用变量的陷阱
2018-06-25 11:42 1331# Java里面volatile关键字修饰引用变量的陷阱 如 ... -
关于Java里面的字符串拼接,你了解多少?
2018-06-25 11:28 1319# 关于Java里面的字符串 ... -
深入理解Java内存模型的语义
2018-06-25 11:39 693### 前言 Java内存模型( ... -
如何证明Java多线程中的成员变量数据是互不可见的
2018-06-21 10:09 1457前面的几篇文章主要介绍了Java的内存模型,进程和线程的定义, ...
相关推荐
Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六) Selector Java NIO系列教程(七) FileChannel Java NIO系列教程(八) ...
java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...
Java NIO英文高清原版
Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...
Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据...
java nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socket
讲解了 JavaIO 与 JAVA NIO区别,JAVA NIO设计理念,以及JDK中java NIO中语法的使用
Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。 Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,...
java NIO是 java New IO 的简称,在 jdk1.4 里提供的新 api 。 Sun 官方标榜的特性如下: – 为所有的原始类型提供 (Buffer) 缓存支持。 – 字符集编码解码解决方案。 – Channel :一个新的原始 I/O 抽象。 – 支持...
java NIO.zip
java侧起server(NioUdpServer1.java),基于Java Nio的selector 阻塞等候,一个android app(NioUdpClient1文件夹)和一个java程序(UI.java)作为两个client分别向该server发数据,server收到后分别打印收到的消息...
java nio 读文件,java nio 读文件
java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现...
JAVA NIO学习资料JAVA NIO学习资料
java NIO技巧及原理解析,java IO原理,NIO框架分析,性能比较
Java NIO测试示例
JavaNIO.pdf
java nio编程 非阻塞模式的通信 电子书 带目录标签
Java NIO系列教程(一) Java NIO 概述
java.nio (NIO stands for non-blocking I/O) is a collection of Java programming language APIs that offer features for intensive I/O operations. It was introduced with the J2SE 1.4 release of Java by ...