SDK1.7新增的nio WatchService能完美解决这个问题。美中不足是如果部署在window系统下会出现莫名其妙的文件夹占用异常导致子目录监听失效,linux下则完美运行。这个问题着实让人头疼。如果有童鞋找到问题根源请一起探讨。

  这里简单的列出用Servlet实现的基本类供大家参考。首先是核心的实现类。

  

   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
;
 
;
;
;
;
 
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
 
;
 
{
// 存储监听主键和监听目录的对应
;
// 目录监听服务
// 目录对应的监听key
();
{
();
);
});
 
)
{
;
}
 
{
();
>();
);
}
 
{
>();
);
);
// 循环路径下所有目录填充map
{
());
// 监控目录内文件的更新、创建和删除事件
{
);
());
{
();
}
}
}
 
// 递归获取所有目录
{
{
);
();
{
);
}
}
}
 
/**
* 启动监控过程
*/
{
// 通过线程池启动一个额外的线程加载Watching过程
);
}
 
/**
* 关闭后的对象无法重新启动
*/
{
();
;
}
 
// * 监控文件系统事件
{
{
// 等待直到获得事件信号
;
{
();
{
;
}
{
();
{
;
}
);
 
();
();
;
)
{
);
{
path
);
);
{
();
}
)
{
);
();
}
 
);
(),
);
// 通知所有观察者事件变更
}
// 为监控下一个通知做准备
();
}
}
 
// * 通知外部各个Observer目录有新的事件更新
{
// 标注目录已经被做了更改
();
// 主动通知各个观察者目标对象状态的变更
);
}
}
 来自CODE的代码片
DirectoryWatcher.java


  Servlet的实现类:
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
;
 
;
;
;
;
;
;
 
;
;
;
;
 
;
;
;
 
{
 
;
;
;
;
>();
 
{
;
}
 
{
;
}
 
)
{
;
 
,
);
}
 
)
{
{
;
);
();
// 建立目录监听,注册观察者为本身
);
);
();
}
 
SubRequestURL
]);
();
);
);
);
}
 
@Override
// 实现Observer观察者接口,接收通知
{
;
 
();
();
();
 
);
{
);
{
);
}
 
}
 
{
);
{
{
()
{
);
}
}
);
}
}
 
{
;
{
{
;
;
}
}
;
}
 
{
);
>();
);
}
 
{
{
();
{
);
}
}
);
}
 
{
();
());
());
());
{
()));
}
);
}
}
 来自CODE的代码片
GetList.java

 转:http://blog.csdn.net/feiying2j/article/details/50719648
附上源码下载地址:
http://download.csdn.net/detail/feiying2j/9439698

相关文章:

  • 2021-11-29
  • 2021-09-20
  • 2022-12-23
  • 2022-12-23
  • 2021-08-09
  • 2021-10-31
  • 2021-12-05
猜你喜欢
  • 2021-10-27
  • 2021-04-04
  • 2022-02-10
  • 2022-01-15
  • 2022-12-23
  • 2022-12-23
  • 2021-10-26
相关资源
相似解决方案