小编jav*_*dev的帖子

在Windows上查看新文件的目录

我有一个模块,必须检查特定目录的新文件(Create).该文件将由另一个我无法控制或可见的系统创建.
我使用了Java WatchService API,当创建新文件时,我能够获得事件ENTRY_CREATE.下面是代码.

WatchService watchService = FileSystems.getDefault().newWatchService();
        Path path = Paths.get(dirLocation);
        path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_MODIFY,
                StandardWatchEventKinds.ENTRY_DELETE);
        WatchKey key;

        while ((key = watchService.take()) != null) {
            for (WatchEvent<?> event : key.pollEvents()) {
                if ("ENTRY_CREATE".equalsIgnoreCase(event.kind().name())) {
                    // File reading here
                }
Run Code Online (Sandbox Code Playgroud)

问题是在尝试读取新文件的某个时候,我正在获取空内容而没有任何异常.搜索Google和SO,我发现如果文件写入不完整,可能会发生这种情况.为了解决这个问题,我尝试了随机访问文件,锁定并创建了FileOutputStream,但没有运气,我得到了空的内容,没有任何例外.最后我尝试了下面的工作.但我担心的是,这必须在单独的线程内部进行检查,以便不阻塞WatchService事件,并且线程数量可以随着文件数量的增长而增长,也可能是更昂贵的操作.

closed = file.renameTo(file);
Run Code Online (Sandbox Code Playgroud)

有没有其他有效的方法来检查文件写入操作是否完成?或者是否有任何API可以处理这个?

java java-7 watchservice java-threads

5
推荐指数
0
解决办法
109
查看次数

在上下文加载之前无法在春季发布自定义事件

我正在尝试在Spring MVC中发布自定义事件,但在加载上下文时未触发,下面是代码段,

连接到服务器后将调用onConnectionOpened,该服务器是在使用@PostConstruct进行bean初始化之后触发的

@Autowired
private ApplicationEventPublisher publisher;

public void onConnectionOpened(EventObject event) {
    publisher.publishEvent(new StateEvent("ConnectionOpened", event));

}
Run Code Online (Sandbox Code Playgroud)

我在侦听器部分中使用注释,如下所示

@EventListener
public void handleConnectionState(StateEvent event) {
   System.out.println(event);
}
Run Code Online (Sandbox Code Playgroud)

我能够看到在加载或刷新上下文后触发的事件,这是否可以在加载或刷新上下文后发布自定义应用程序事件?

我正在使用Spring 4.3.10

提前致谢

java spring spring-mvc spring-annotations

3
推荐指数
1
解决办法
788
查看次数