另一台机器中有一个servlet java应用程序,其目录和文件带有子目录。现在,如果在这些目录中添加了新的文本行或新文件。我想在发生任何更改时退出。对于实现Java应用程序的任何想法,将不胜感激
答案 0 :(得分:0)
要执行此过程,您需要Schedule,并且为此有很多API。在下面的示例中,我将使用java.util.concurrent
库。(java 5)
1-安排流程:
public class BeeperControl {
private static final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
public static void beepForAnHour() {
final Runnable beeper = new Runnable() {
public void run() {
// do your stuff here
System.out.println("beep"); }
};
final ScheduledFuture<?> beeperHandle =
scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
scheduler.schedule(new Runnable() {
public void run() { beeperHandle.cancel(true); }
}, 60 * 60, SECONDS);
}
public static void main(String... args){
beepForAnHour();
}
}
2-观看D:\ Temp下文件的创建,删除,移动和重命名,并且应该可以让您了解所需内容:
public class Foo3
{
public static void main(String[] args) throws Exception
{
FileSystem fs = FileSystems.getDefault();
WatchService ws = fs.newWatchService();
Path pTemp = Paths.get("D:/Temp");
pTemp.register(ws, new WatchEvent.Kind[] {ENTRY_MODIFY, ENTRY_CREATE, ENTRY_DELETE}, FILE_TREE);
while(true)
{
WatchKey k = ws.take();
for (WatchEvent<?> e : k.pollEvents())
{
Object c = e.context();
System.out.printf("%s %d %s\n", e.kind(), e.count(), c);
}
k.reset();
}
}
}
1-安排流程Reference1
2-观看创建Reference2
希望获得帮助。
答案 1 :(得分:0)
我们了解您的问题陈述,因此您应该在WatchService
软件包中放入java.nio
。
WatchService
允许注册目录和任意数量的全局模式。此类将负责过滤,并且仅发出您感兴趣的事件。
DirectoryWatchService watchService = new SimpleDirectoryWatchService(); // May throw
watchService.register( // May throw
new DirectoryWatchService.OnFileChangeListener() {
@Override
public void onFileCreate(String filePath) {
// File created
}
@Override
public void onFileModify(String filePath) {
// File modified
}
@Override
public void onFileDelete(String filePath) {
// File deleted
}
},
<directory>, // Directory to watch
<file-glob-pattern-1>, // E.g. "*.log"
<file-glob-pattern-2>, // E.g. "input-?.txt"
... // As many patterns as you like
);
watchService.start();
有关完整的解决方案,您可以参考GitHub回购