一种比较简陋的方法:
<!----> 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
分享到:
相关推荐
本案例的标题和描述提到了“监听文件下文件发生变化时复制文件到另一个文件夹”,这通常涉及到文件系统的观察者模式(Observer Pattern)和多线程技术。 首先,我们需要理解“监听文件”这一概念。在操作系统层面,...
当我们谈论“使用线程 目录监视 文件改动”时,我们实际上是在讨论如何利用多线程技术来实时监控文件或目录的变化,并对这些变化做出响应。 目录监视是一种功能,允许程序跟踪指定目录中的文件或子目录的添加、删除...
5、程序开始监视该目录本身以及该目录下所有子目录和文件,若有任何变动(包括文件/文件夹重命名、移动、复制、删除、修改、新建等),则在屏幕打印“目录被改动![时间:(输出变动时间)]” 6、监视过程中,若用户...
5. **多线程**: 由于文件系统监控通常涉及I/O操作,可能会阻塞主线程,因此可能需要在后台线程中运行监控任务,以保持应用程序的响应性。 6. **错误处理**: 实现文件夹监控时,必须考虑错误处理,例如文件夹不...
在Python编程中,有时我们需要监控文件系统的变动,例如...结合配置文件,我们可以灵活地设置监听规则,实现对多个文件夹的定制化监控。这个程序对于日志监控、数据备份或其他需要实时跟踪文件改动的场景都十分有用。
6. **线程安全**:在多线程环境中,配置文件的重新加载需要确保线程安全。通常,配置对象会被多个线程共享,因此更新配置时应采取同步机制,避免数据竞争。 7. **事件驱动编程**:可以采用事件驱动的方式处理配置...
主要功能 实时监听指定目录的变化情况 将文件变动变化情况记录,过滤掉无用的信息(通过文件...多线程运行 7牛存储API的使用 模拟post登录,并模拟向web后台添加内容 利用文件md5值做为文件指纹,去掉重复文件 记录博客
8. **多线程**:考虑到文件系统事件可能频繁触发,为了不影响主应用程序的响应性,可以使用多线程技术。例如,将事件处理逻辑放在后台线程上执行,避免阻塞UI。 9. **调试与测试**:在开发过程中,使用Visual ...
可以采用增量同步、批量处理和多线程等策略来提高效率。 10. **日志记录**: 记录监控和同步过程中的事件和错误对于调试和监控系统状态至关重要。使用如`winston`这样的日志库可以帮助我们轻松地管理和分析日志信息...
- 确保在多线程环境中安全地访问和更新配置,可能需要同步控制。 - 如果配置文件过大,频繁加载可能会对性能造成影响,考虑使用缓存和合理的加载策略。 - 捕获并处理可能出现的异常,如文件不存在、读取失败等。 ...
该项目主要使用了多线程、JFrame框架窗体、Panel面板、IO流、KeyListener键盘监听器以及音频播放等技术实现的。 Java基础入门,使用Java语言制作简单的小游戏,项目中添加了注释,方便读者阅读理解。同学可以通过对...
总的来说,“易语言监视文件夹是否被改动.zip”中的源码为我们展示了如何利用易语言这一国产编程语言来实现文件系统监控,这对于系统管理、数据备份、日志记录等领域都有重要的应用价值。通过学习和研究这段代码,...
其主要特点包括使用C++语言开发,支持多线程架构,并以守护进程的方式运行。服务器启动时,会加载streamingserver.xml文件中的默认参数,进行资源和信号处理方法的配置,并启动三个主要的工作线程:空闲线程、事件...
总之,MFC下的目录监视功能是通过结合Windows API和MFC的类库实现的,它涉及到线程处理、异步操作、文件系统事件处理等多个方面,是提升应用程序功能和用户体验的重要技术。在实际开发中,这种功能可以应用于各种...
为了解决 ISC DHCP 的缺陷,我们可以采用高性能 DHCP 架构和处理方案,如 ZDNS DHCP 多进程方案和 ZDNS DHCP 多线程方案。 ZDNS DHCP 多进程方案 ZDNS DHCP 多进程方案可以实现高性能的 DHCP 服务器。该方案的优点...
6. **多线程/协程**:为了实现文件监控和用户交互并行,Go包可能会使用Go的并发特性,如goroutines和channels。一个goroutine负责监控文件,另一个处理用户输入和输出。 7. **日志记录与调试**:在开发过程中,可能...
1.0版本 1.点击开始传输后 保留“传输文件”字样 2.尝试改动buff[]的大小能否加快传输速度 3.将接收界面的文件名限定长度 4.activity_main中,...5.新增多线程传输一个文件的功能 6.显示下载速度 7.改用多端口监听
5. **使用IDE集成功能**:很多IDE(如IntelliJ IDEA,Eclipse)都有热部署插件,如JRebel或Spring Loaded,它们能够在代码修改后自动重新加载类,包括iBatis的配置和mapper文件。 6. **避免缓存**:确保在mapper...
使用技术:C/S(客户端-服务器)、TCP/IP(协议)、socket、多线程、数据库; 4.项目描述:1)服务器:服务器监听一个IP地址,用来连接教师端和学生端,用于数据转发(eg:教师端发消息到服务器,在由服务器发消息到学生...
在这个文件中,你可以定义服务器监听的端口、虚拟主机、日志文件位置等信息。为了整合mod_jk,你需要在httpd.conf中加载mod_jk模块并配置相关指令。 3. **mod_jk.conf**:这是mod_jk模块的特定配置文件,包含了mod_...