Topic: 怎样捕获一个文件的修改?

  Print this page

1.怎样捕获一个文件的修改? Copy to clipboard
Posted by: ibmterminator
Posted on: 2003-09-19 14:01

就是当一个文件(比如一个配置文件)被外部工具修改时,怎样让Java程序能及时捕获到这一事件,并重新Load这个文件?

就向当一个servlet修改时,应用服务器会自动重新load这个servlet

2.Re:怎样捕获一个文件的修改? [Re: ibmterminator] Copy to clipboard
Posted by: dog72
Posted on: 2003-09-19 14:05

每次访问这个配置文件所对应的对象的时候,检查时间戳,如果更新则重新load。

3.Re:怎样捕获一个文件的修改? [Re: dog72] Copy to clipboard
Posted by: ibmterminator
Posted on: 2003-09-19 14:21

dog72 wrote:
每次访问这个配置文件所对应的对象的时候,检查时间戳,如果更新则重新load。


我不希望我的程序不停的检测这个文件,而是这个文件的修改通知我的程序去重新load这个文件。即最好是一种事件通知的机制。

4.Re:怎样捕获一个文件的修改? [Re: dog72] Copy to clipboard
Posted by: hohaischooldays
Posted on: 2003-09-19 18:15

通过异常处理可以不?我不清楚对不对,随便说的错了别骂我呀!

5.Re:怎样捕获一个文件的修改? [Re: ibmterminator] Copy to clipboard
Posted by: ibmterminator
Posted on: 2003-09-19 21:36

各位老大站出来说句话啊,难道这个问题没人知道具体该怎么作?我想rainman,dapan,floater等几位老大总知道的吧?

6.Re:怎样捕获一个文件的修改? [Re: ibmterminator] Copy to clipboard
Posted by: ibmterminator
Posted on: 2003-09-19 22:31

可能我上面的帖子没有说清除,我再详细的说一下吧:

我的应用用到一个配置文件,配置系统的很多参数,这个文件在系统启动时load到内存,以后对这些参数的访问就直接访问内存,不再访问文件。但我希望这个配置文件被修改时我的程序能自动重新load这个文件。这个文件可能被任何编辑工具修改,例如UltraEdit,vi等。甚至ftp上传覆盖。

我不想让我的程序不停的check这个文件,或者每次访问任何一个系统参数时都check一下这个文件,我总觉得这是比较粗笨的实现方法。各位DX帮帮忙,看又没有更好的实现方法。

我发现很多java应用服务器都实现了这个功能,例如IBM WebSphere,每当我ftp上传一个servlet class文件,覆盖原来的文件,WebSphere都会马上重新load这个class,不知道是怎么实现的?

7.Re:怎样捕获一个文件的修改? [Re: ibmterminator] Copy to clipboard
Posted by: floater
Posted on: 2003-09-19 23:12

You have a seperate class to do this:

check timestamps in the dir you are interested in, periodically.
if timestamp is newer, reload and refresh memory.

You application just grabs whatever is in the memory.

WS is doing this every 1 second, I believe.

8.Re:怎样捕获一个文件的修改? [Re: floater] Copy to clipboard
Posted by: rainman
Posted on: 2003-09-20 16:01

I agree, most of IDEs or Editors use this way, like Dreamweaver, Ultraedit ...
You may set the checking interval if the software has such preference.

floater wrote:
You have a seperate class to do this:

check timestamps in the dir you are interested in, periodically.
if timestamp is newer, reload and refresh memory.

You application just grabs whatever is in the memory.

WS is doing this every 1 second, I believe.

9.Re:怎样捕获一个文件的修改? [Re: ibmterminator] Copy to clipboard
Posted by: ibmterminator
Posted on: 2003-09-21 19:02

既然两位DX都这么说,看来我目前也只能采用这种方法了。我也没有找到相关的资料。

谢谢两位DX的帮忙。

10.Re:怎样捕获一个文件的修改? [Re: floater] Copy to clipboard
Posted by: dog72
Posted on: 2003-09-22 12:27

floater wrote:
You have a seperate class to do this:

check timestamps in the dir you are interested in, periodically.
if timestamp is newer, reload and refresh memory.

You application just grabs whatever is in the memory.

WS is doing this every 1 second, I believe.

好的设计是只有一个访问配置的入口 getConfig(),在这个函数的内部去判断是否更新,如果更新就reload配置。
这样做不用线程,当然如果多线程访问还是需要同步的。

11.Re:怎样捕获一个文件的修改? [Re: ibmterminator] Copy to clipboard
Posted by: yb79528
Posted on: 2003-09-29 13:52

听说有个JNIWAPPER类可以监控文件属性的变化的

12.Re:怎样捕获一个文件的修改? [Re: ibmterminator] Copy to clipboard
Posted by: gjf181219
Posted on: 2003-09-29 15:19

没看懂


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923