我们用IDE(例如Eclipse)编程,外部更改了代码文件,IDE马上提升“文件有更改”。Jdk7的NIO2.0也提供了这个功能,用于监听文件系统的更改。它采用类似观察者的模式,注册相关的文件更改事件(新建,删除……),当事件发生的,通知相关的监听者。
java.nio.file.*包提供了一个文件更改通知API,叫做Watch Service API.
实现流程如下
1.为文件系统创建一个WatchService 实例 watcher
2.为你想监听的目录注册 watcher。注册时,要注明监听那些事件。
3.在无限循环里面等待事件的触发。当一个事件发生时,key发出信号,并且加入到watcher的queue
4.从watcher的queue查找到key,你可以从中获取到文件名等相关信息
5.遍历key的各种事件
6.重置 key,重新等待事件
7.关闭服务
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import static java.nio.file.StandardWatchEventKind.*;
/**
* @author kencs@foxmail.com
*/
public class TestWatcherService {
private WatchService watcher;
public TestWatcherService(Path path)throws IOException{
watcher = FileSystems.getDefault().newWatchService();
path.register(watcher, ENTRY_CREATE,ENTRY_DELETE,ENTRY_MODIFY);
}
public void handleEvents() throws InterruptedException{
while(true){
WatchKey key = watcher.take();
for(WatchEvent<?> event : key.pollEvents()){
WatchEvent.Kind kind = event.kind();
if(kind == OVERFLOW){//事件可能lost or discarded
continue;
}
WatchEvent<Path> e = (WatchEvent<Path>)event;
Path fileName = e.context();
System.out.printf("Event %s has happened,which fileName is %s%n"
,kind.name(),fileName);
}
if(!key.reset()){
break;
}
}
}
public static void main(String args[]) throws IOException, InterruptedException{
if(args.length!=1){
System.out.println("请设置要监听的文件目录作为参数");
System.exit(-1);
}
new TestWatcherService(Paths.get(args[0])).handleEvents();
}
}
接下来,见证奇迹的时刻
1.随便新建一个文件夹 例如 c:\\test
2.运行程序 java TestWatcherService c:\\test
3.在该文件夹下新建一个文件本件 “新建文本文档.txt”
4.将上述文件改名为 “abc.txt”
5.打开文件,输入点什么吧,再保存。
6.Over!看看命令行输出的信息吧
Event ENTRY_CREATE has happened,which fileName is 新建文本文档.txt
Event ENTRY_DELETE has happened,which fileName is 新建文本文档.txt
Event ENTRY_CREATE has happened,which fileName is abc.txt
Event ENTRY_MODIFY has happened,which fileName is abc.txt
Event ENTRY_MODIFY has happened,which fileName is abc.txt
更多的jdk7文章,欢迎访问http://janeky.iteye.com/category/157060
分享到:
相关推荐
6. **JDK7新特性<六> 监听文件系统的更改** 这个特性允许程序注册监听文件或目录的改变,当文件系统发生变动时,可以立即响应,增强了实时性和效率,特别是在文件监控应用中非常有用。 7. **JDK7新特性<七> 遍历...
`WatchService`接口则允许监听文件系统事件,如文件的创建、删除和修改。 此外,JDK7对异常处理进行了优化,引入了`SuppressedException`,使得在捕获异常时,可以方便地获取并处理其他被抑制的异常。同时,`...
2. 修改`config/server.properties`配置文件,设置`broker.id`和`zookeeper.connect`。 3. 启动Zookeeper服务。 4. 启动Kafka服务。 5. 使用命令行工具或管理界面检查Kafka集群的状态。 在`springboot-kafka`目录下...
5. **改进的文件系统API**:NIO.2提供了对异步I/O和文件属性操作的增强,如WatchService,可以监听文件系统事件。 6. **钻石操作符**:在创建泛型实例时,可以省略类型参数,编译器会根据上下文推断类型,如`List...
2. **配置步骤**: 在`conf/server.xml`文件中添加相应的`<Context>`元素来定义虚拟目录。例如: ```xml <Context path="/test" docBase="f:\testWeb" reloadable="true"/> ``` - `path`属性定义了虚拟目录的路径...
在系统属性的“高级”选项卡中,点击“环境变量”,在系统变量中新建或修改“JAVA_HOME”变量,值设为JDK的安装目录。同时,将“Path”变量的值中添加%JAVA_HOME%\bin,确保命令行能识别Java命令。 JDK1.8引入了...
在`/usr/local/apache-activemq/conf/activemq.xml`文件中,找到`<plugins>`部分,并添加或修改`<simpleAuthenticationPlugin>`插件配置: ```xml <plugins> <simpleAuthenticationPlugin> <users> ...
JDK 7 Reference Card 是一个关于 Java 7 的综合性参考指南,旨在帮助开发者快速掌握 Java 7 的新特性与改进。它不仅包含了所有新增的功能,还涵盖了增强和修改过的 JSRs(Java Specification Requests),并总结了...
`java.nio.file`包提供了新的文件系统API,支持文件系统事件监听。 - **安全增强**:1.7版本增强了对加密和安全协议的支持,以及针对网络通信的安全控制。 - **JVM改进**:包括更好的内存管理,更高效的类加载机制...
<artifactId>maven-surefire-plugin</artifactId> <version>2.22.2</version> <configuration> <suiteXmlFiles> <suiteXmlFile>testng.xml</suiteXmlFile> </suiteXmlFiles> </configuration> </plugin> </...
另外,WatchService API允许程序监听文件系统事件,如文件创建、修改和删除。 对于数据库连接,JDBC 4.1在JDK 1.7.07中引入了新的功能,如支持预编译的SQL语句的批处理,提高了数据库操作的效率。同时,增强了对...
7. Type Inference for Generic Instance Creation:通过“钻石操作符”<>简化泛型实例化。 三、Java内存模型与垃圾回收 理解Java内存模型,包括堆内存、栈内存、方法区(元空间)以及程序计数器等,以及它们在JVM...
如果JDK路径不同,找到`pom.xml`中的`maven-compiler-plugin`插件配置,修改`<compilerArgs>`或`<source>`和`<target>`标签的值以匹配你的JDK版本。 【运行与调试】:使用Eclipse IDE,你可以将此项目导入为Maven...
- `export JAVA_HOME=/usr/local/jdk` (需添加到/etc/bashrc或/etc/profile文件中) - **运行命令**: - **Windows**: 进入Tomcat的bin目录,使用`startup`命令启动Tomcat服务;使用`shutdown`命令关闭服务。 - **...
- **WatchService**:监视文件系统对象的更改,可以监听目录或文件的创建、删除、修改事件。 3. **集合框架增强**: - **集合接口的新方法**:例如,List接口增加了`forEach()`,Set接口增加了`removeIf...
3. **WatchService**:允许程序监听文件系统中的更改事件,如创建、删除和修改。 此外,JDK 1.7在并发和垃圾回收方面也做了优化: 1. **Fork/Join框架**:用于并行执行任务,特别是在处理大量数据时,能显著提高...
在本文中,我们将深入探讨JDK 8在Windows 64位系统中的安装、配置以及其关键特性。 ### 安装JDK 8 "jdk-8u281-windows-x64.exe" 是JDK 8u281的Windows 64位安装程序。下载并运行这个exe文件后,按照向导指示进行...
在热部署的场景下,JDK 7的`java.nio.file.WatchService`接口被用来监听文件或目录的变化。开发者可以注册一个或多个文件系统路径到WatchService,然后该服务会触发事件当这些路径中的文件或目录发生创建、删除、...
1. **Lambda表达式**:JDK 1.8引入了Lambda表达式,这是一种更简洁、更易读的编写匿名函数的方式,大大简化了处理集合和事件监听等场景的代码。 2. **方法引用和构造器引用**:这些新的语法特性允许直接引用类的...