示例代码:
def fn = 'abc.log'
def r1 = new FileReader(fn)
Thread.sleep(60 * 1000)
def r2 = new FileReader(fn)
让我们说日志文件经常滚动,但根据大小,根据"流量",它不可预测。有没有办法确认读者r1
和r2
指向同一个文件(即填充是否滚动)?
答案 0 :(得分:1)
希望您不仅限于使用FileReader
课程。此解决方案使用具有文件名字符串的其他类。
对于我的第一次尝试,我找到了Files.isSamePath()。根据名称,这似乎是一个不错的候选人......在创建第一条路径后,我将file.txt
移至file.txt.1
并触及了新的file.txt
。
groovy:000> path1 = FileSystems.default.getPath("tmp", "file.txt")
===> tmp/file.txt
groovy:000> path2 = FileSystems.default.getPath("tmp", "file.txt")
===> tmp/file.txt
groovy:000> Files.isSameFile(path1, path2)
===> true
这里没有运气。
接下来我找到了Files.getAttribute()。如果有创建的日期属性,它看起来可能会起作用。答对了! BasicFileAttributes.creationTime()
groovy:000> fileTime = Files.getAttribute(path1, "creationTime")
===> 2014-10-21T17:30:31Z
groovy:000> assert fileTime != Files.getAttribute(path1, "creationTime")
===> null
在上面的示例中,我将file.txt
移至file.txt.2
并触及了新的file.txt
。请注意,我没有更改path1
。这将读取属性的当前值,因此您需要将初始值存储在变量中以与后面的属性值进行比较。