File Change Watcher
Difficulty: Medium · Topics: File IO, Events, Observer Pattern
Difficulty: Medium | Tags: File IO, Events, Observer Pattern
Description
Implement a file system watcher that monitors a directory for changes (file created, modified, deleted) and invokes registered callbacks when events occur.
Implement:
FileWatcher
watch(directoryPath) — start watching
on(eventType, callback) — register listener
stop() — stop watching
Event types: "created", "modified", "deleted"
Callback receives: { eventType, filePath, timestamp }
Examples
watcher = new FileWatcher()
watcher.watch("/var/logs")
watcher.on("created", (event) => {
print("New file: " + event.filePath) // "New file: /var/logs/app.log"
})
watcher.on("modified", (event) => {
print("Changed: " + event.filePath)
})
// When a new file is created in /var/logs → callback fires
// When a file is modified → callback fires
// When a file is deleted → callback fires
watcher.stop() // cleanup
Constraints
- Must detect changes within 1 second (polling) or immediately (OS events).
- Handle subdirectories (configurable: recursive or top-level only).
- Ignore temporary/swap files (e.g.,
.swp,~). - Handle permission errors gracefully.
- Must clean up resources on
stop().
Hints
Hint 1
In Java, use java.nio.file.WatchService. In Node.js, use fs.watch(). In Go, use fsnotify.
Follow-up
- Add debouncing (fire callback only after no changes for N ms).
- Add file content diffing — report what changed, not just that it changed.