gpt4 book ai didi

groovy - 在 Groovy 中跟踪文件

转载 作者:行者123 更新时间:2023-12-02 07:58:47 26 4
gpt4 key购买 nike

我想知道是否有一种简单的方法可以在 Groovy 中跟踪文件?我知道如何读取文件,但是如何读取文件,然后等待添加更多行,读取它们,等待等等...

我确信这是一个非常愚蠢的解决方案:

def lNum = 0
def num= 0
def numLines = 0
def myFile = new File("foo.txt")
def origNumLines = myFile.eachLine { num++ }
def precIndex = origNumLines

while (true) {
num = 0
lNum = 0
numLines = myFile.eachLine { num++ }

if (numLines > origNumLines) {
myFile.eachLine({ line ->

if (lNum > precIndex) {
println line
}
lNum++
})
}
precIndex = numLines

Thread.sleep(5000)
}

请注意,我对调用 Unix“tail”命令并不真正感兴趣。除非这是唯一的解决方案。

最佳答案

我编写了一个类似于基本尾部功能的常规类:

class TailReader {

boolean stop = false

public void stop () {
stop = true
}

public void tail (File file, Closure c) {
def runnable = {
def reader

try {
reader = file.newReader()
reader.skip(file.length())

def line

while (!stop) {
line = reader.readLine()
if (line) {
c.call(line)
}
else {
Thread.currentThread().sleep(1000)
}
}

}
finally {
reader?.close()
}
} as Runnable

def t = new Thread(runnable)
t.start()
}
}

tail 方法将文件和闭包作为参数。它将在单独的线程中运行,并将附加到文件的每个新行传递给给定的闭包。 tail 方法将一直运行,直到在 TailReader 实例上调用 stop 方法。以下是如何使用 TailReader 类的简短示例:

def reader = new TailReader()
reader.tail(new File("/tmp/foo.log")) { println it }

// Do something else, e.g.
// Thread.currentThread().sleep(30 * 1000)

reader.stop()

关于groovy - 在 Groovy 中跟踪文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7905605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com