一种比较简陋的方法:
<!----> 1
ActionListener taskPerformer
=
new
ActionListener() {
2
public
void
actionPerformed(ActionEvent evt) {
3
log.info(
"
monitor is running at
"
+
new
java.util.Date());
4
String configfile
=
(String)getServletContext().getAttribute(
"
configfile
"
);
5
if
(configfile
!=
null
&&
configfile.length()
!=
0
){
6
try
{
7
File file
=
new
File(configfile);
8
if
(file.lastModified()
>
lastModifyTime){
9
lastModifyTime
=
file.lastModified();
10
loadProp();
11
}
12
}
catch
(Exception e){
13
log.error(
"
construct file:
"
+
configfile
+
"
exception
"
);
14
e.printStackTrace();
15
}
16
}
17
}
18
};
19
20
//
启动监听线程
21
new
Timer(delay, taskPerformer).start();
来自geosoft.no的解决方法:
<!----> 1
import
java.io.File;
2
3
/**
4
* Interface for listening to disk file changes.
5
*
@see
FileMonitor
6
*
7
*
@author
<a href="mailto:jacob.dreyer@geosoft.no">Jacob Dreyer</a>
8
*/
9
public
interface
FileListener
10
{
11
/**
12
* Called when one of the monitored files are created, deleted
13
* or modified.
14
*
15
*
@param
file File which has been changed.
16
*/
17
void
fileChanged (File file);
18
}
<!----> 1
import
java.util.
*
;
2
import
java.io.File;
3
import
java.lang.ref.WeakReference;
4
5
/**
6
* Class for monitoring changes in disk files.
7
* Usage:
8
*
9
* 1. Implement the FileListener interface.
10
* 2. Create a FileMonitor instance.
11
* 3. Add the file(s)/directory(ies) to listen for.
12
*
13
* fileChanged() will be called when a monitored file is created,
14
* deleted or its modified time changes.
15
*
16
*
@author
<a href="mailto:jacob.dreyer@geosoft.no">Jacob Dreyer</a>
17
*/
18
public
class
FileMonitor
19
{
20
private
Timer timer_;
21
private
HashMap files_;
//
File -> Long
22
private
Collection listeners_;
//
of WeakReference(FileListener)
23
24
25
/**
26
* Create a file monitor instance with specified polling interval.
27
*
28
*
@param
pollingInterval Polling interval in milli seconds.
29
*/
30
public
FileMonitor (
long
pollingInterval)
31
{
32
files_
=
new
HashMap();
33
listeners_
=
new
ArrayList();
34
35
timer_
=
new
Timer (
true
);
36
timer_.schedule (
new
FileMonitorNotifier(),
0
, pollingInterval);
37
}
38
39
40
41
/**
42
* Stop the file monitor polling.
43
*/
44
public
void
stop()
45
{
46
timer_.cancel();
47
}
48
49
50
/**
51
* Add file to listen for. File may be any java.io.File (including a
52
* directory) and may well be a non-existing file in the case where the
53
* creating of the file is to be trepped.
54
* <p>
55
* More than one file can be listened for. When the specified file is
56
* created, modified or deleted, listeners are notified.
57
*
58
*
@param
file File to listen for.
59
*/
60
public
void
addFile (File file)
61
{
62
if
(
!
files_.containsKey (file)) {
63
long
modifiedTime
=
file.exists()
?
file.lastModified() :
-
1
;
64
files_.put (file,
new
Long (modifiedTime));
65
}
66
}
67
68
69
70
/**
71
* Remove specified file for listening.
72
*
73
*
@param
file File to remove.
74
*/
75
public
void
removeFile (File file)
76
{
77
files_.remove (file);
78
}
79
80
81
82
/**
83
* Add listener to this file monitor.
84
*
85
*
@param
fileListener Listener to add.
86
*/
87
public
void
addListener (FileListener fileListener)
88
{
89
//
Don't add if its already there
90
for
(Iterator i
=
listeners_.iterator(); i.hasNext(); ) {
91
WeakReference reference
=
(WeakReference) i.next();
92
FileListener listener
=
(FileListener) reference.get();
93
if
(listener
==
fileListener)
94
return
;
95
}
96
97
//
Use WeakReference to avoid memory leak if this becomes the
98
//
sole reference to the object.
99
listeners_.add (
new
WeakReference (fileListener));
100
}
101
102
103
104
/**
105
* Remove listener from this file monitor.
106
*
107
*
@param
fileListener Listener to remove.
108
*/
109
public
void
removeListener (FileListener fileListener)
110
{
111
for
(Iterator i
=
listeners_.iterator(); i.hasNext(); ) {
112
WeakReference reference
=
(WeakReference) i.next();
113
FileListener listener
=
(FileListener) reference.get();
114
if
(listener
==
fileListener) {
115
i.remove();
116
break
;
117
}
118
}
119
}
120
121
122
123
/**
124
* This is the timer thread which is executed every n milliseconds
125
* according to the setting of the file monitor. It investigates the
126
* file in question and notify listeners if changed.
127
*/
128
private
class
FileMonitorNotifier
extends
TimerTask
129
{
130
public
void
run()
131
{
132
//
Loop over the registered files and see which have changed.
133
//
Use a copy of the list in case listener wants to alter the
134
//
list within its fileChanged method.
135
Collection files
=
new
ArrayList (files_.keySet());
136
137
for
(Iterator i
=
files.iterator(); i.hasNext(); ) {
138
File file
=
(File) i.next();
139
long
lastModifiedTime
=
((Long) files_.get (file)).longValue();
140
long
newModifiedTime
=
file.exists()
?
file.lastModified() :
-
1
;
141
142
//
Chek if file has changed
143
if
(newModifiedTime
!=
lastModifiedTime) {
144
145
//
Register new modified time
146
files_.put (file,
new
Long (newModifiedTime));
147
148
//
Notify listeners
149
for
(Iterator j
=
listeners_.iterator(); j.hasNext(); ) {
150
WeakReference reference
=
(WeakReference) j.next();
151
FileListener listener
=
(FileListener) reference.get();
152
153
//
Remove from list if the back-end object has been GC'd
154
if
(listener
==
null
)
155
j.remove();
156
else
157
listener.fileChanged (file);
158
}
159
}
160
}
161
}
162
}
163
164
165
/**
166
* Test this class.
167
*
168
*
@param
args Not used.
169
*/
170
public
static
void
main (String args[])
171
{
172
//
Create the monitor
173
FileMonitor monitor
=
new
FileMonitor (
1000
);
174
175
//
Add some files to listen for
176
monitor.addFile (
new
File (
"
D:\\myjava\\JCreatorWorkspace\\FileMonitor\\test.txt
"
));
177
178
//
Add a dummy listener
179
monitor.addListener (monitor.
new
TestListener());
180
181
//
Avoid program exit
182
while
(
!
false
) ;
183
}
184
185
186
private
class
TestListener
187
implements
FileListener
188
{
189
public
void
fileChanged (File file)
190
{
191
System.out.println (
"
File [
"
+
file.getName()
+
"
] changed At:
"
+
new
java.util.Date());
192
}
193
}
194
}
195
196
197
分享到:
相关推荐
建立线程用于目录监视, 文件改动.
5、程序开始监视该目录本身以及该目录下所有子目录和文件,若有任何变动(包括文件/文件夹重命名、移动、复制、删除、修改、新建等),则在屏幕打印“目录被改动![时间:(输出变动时间)]” 6、监视过程中,若用户...
主要功能 实时监听指定目录的变化情况 将文件变动变化情况记录,过滤掉无用的信息(通过文件...多线程运行 7牛存储API的使用 模拟post登录,并模拟向web后台添加内容 利用文件md5值做为文件指纹,去掉重复文件 记录博客
该项目主要使用了多线程、JFrame框架窗体、Panel面板、IO流、KeyListener键盘监听器以及音频播放等技术实现的。 Java基础入门,使用Java语言制作简单的小游戏,项目中添加了注释,方便读者阅读理解。同学可以通过对...
1.0版本 1.点击开始传输后 保留“传输文件”字样 2.尝试改动buff[]的大小能否加快传输速度 3.将接收界面的文件名限定长度 4.activity_main中,...5.新增多线程传输一个文件的功能 6.显示下载速度 7.改用多端口监听
使用技术:C/S(客户端-服务器)、TCP/IP(协议)、socket、多线程、数据库; 4.项目描述:1)服务器:服务器监听一个IP地址,用来连接教师端和学生端,用于数据转发(eg:教师端发消息到服务器,在由服务器发消息到学生...
实例190 多线程 实例 6.8 鼠标、键盘相关设置 实例191 动画鼠标 实例192 限制鼠标移动区域 第7章 注册表 7.1 显示与隐藏 实例193 隐藏、显示“我的电脑”、“回收站”、“网上邻居” 实例194 隐藏、显示...
实例190 多线程 实例 6.8 鼠标、键盘相关设置 实例191 动画鼠标 实例192 限制鼠标移动区域 第7章 注册表 7.1 显示与隐藏 实例193 隐藏、显示“我的电脑”、“回收站”、“网上邻居” 实例194 隐藏、显示...
调用者需要列举所有文件以找到改动的内容。 1051 已将停止控制发送给与其他运行服务相关的服务。 1052 所要求的控制对此服务无效。 1053 服务没有及时地响应启动或控制请求。 1054 无法为该服务创建...
cc实例 190 多线程cc实例 6.8 鼠标.c键盘相关设置 cc实例191 动画鼠标 cc实例192 限制鼠标移动区域 第7章 注册表 7.1 显示与隐藏 cc 实例193 隐藏.c显示“我的电脑”.c“回收站”.c“网上邻居” cc...
cc实例190 多线程cc实例 6.8 鼠标.c键盘相关设置 cc实例191 动画鼠标 cc实例192 限制鼠标移动区域 第7章 注册表 7.1 显示与隐藏 cc 实例193 隐藏.c显示“我的电脑”.c“回收站”.c...
cc实例190 多线程cc实例 6.8 鼠标.c键盘相关设置 cc实例191 动画鼠标 cc实例192 限制鼠标移动区域 第7章 注册表 7.1 显示与隐藏 cc 实例193 隐藏.c显示“我的电脑”.c“回收站”.c...
增加了一个demo——文件传输服务端及客户端,它几乎可以当成软件来使用,多线程且支持分块传送; 增加了timer功能,考虑到st_server已经用上了timer,加之做文件传输服务器的时候,也用到了timer,所以干脆把timer...
可安装多个服务端 其它细节方面的功能大家自己去发现吧 功能: <br>文件管理 完全仿Radmin所写, 文件、文件夹批量上传、删除、下载、创建、重命名 屏幕监视 扫描算法速度最快可达到120帧/秒,差异算法...
当在4002端口监听的线程接收请求后 创建线程iscsi_rx_thread接收SCSI命令 创建线程iscsi_tx_thread传送应答和状态 FETD创建一个Target_Scsi_Cmnd类型的数据接收SCSI命令,将其加入命令队列,唤醒STML的线程STT处理...