import java.io.File
class FileMonitor {
var monitor: FileAlterationMonitor = null
def this(interval: Long) = {
this
this.monitor = new FileAlterationMonitor(interval)
}
def monitors(path: String, listener: FileAlterationListener) = {
try {
//val observer: FileAlterationObserver = new FileAlterationObserver(new File(path))
val filePath = new File(path)
log.info("filePath.exists()===="+filePath.exists())
val RealFilePath=if(filePath.exists())filePath else new File("./aaa/")
val observer: FileAlterationObserver = new FileAlterationObserver(RealFilePath)
/* val observer: FileAlterationObserver = filePath.exists() match {
case true => new FileAlterationObserver(filePath)
case false =>
}*/
monitor.addObserver(observer)
observer.addListener(listener)
} catch {
case e: Exception =>
val msg = "monitor failure" + {
e.getMessage
}
log.error(msg, e)
}
}
def stop() = {
try {
monitor.stop()
} catch {
case e: Exception =>
val msg = "stop failure" + {
e.getMessage
}
log.error(msg, e)
}
}
def start() = {
try {
monitor.start()
} catch {
case e: Exception =>
val msg = "start failure" + {
e.getMessage
}
log.error(msg, e)
}
}
}
import org.apache.commons.io.monitor.{FileAlterationObserver, FileAlterationListener}
import java.io.File
class FileListener extends FileAlterationListener with LogSupport {
val monitor: FileMonitor = null
override def onStop(p1: FileAlterationObserver) = {
}
override def onFileDelete(directory: File) = {
println("onFileChange" + directory.getName)
}
override def onFileChange(directory: File) = {
println("onFileChange" + directory.getName)
}
override def onFileCreate(p1: File) = {
println("onFileCreate" + p1.getName)
}
override def onDirectoryDelete(p1: File) = {
println("onDirectoryDelete" + p1.getName)
}
override def onDirectoryChange(p1: File) = {
println("onDirectoryChange" + p1.getName)
}
override def onDirectoryCreate(p1: File) = {
println("onDirectoryCreate" + p1.getName)
}
override def onStart(p1: FileAlterationObserver) = {
}
}
object RealTimeMonitor {
val sysOS = Try(System.getProperty("os.name").toLowerCase).getOrElse("linux")
def isWindows = sysOS.contains("window")
val filePath = if(sysOS.contains("window")){
".\\aa\\"
} else {
"./aaaaa/"
}
val m: FileMonitor = new FileMonitor(60000)
m.monitors(filePath, new FileListener())
m.start()
}