Groovy 检查FileReader是否为同一文件

Groovy 检查FileReader是否为同一文件,groovy,Groovy,示例代码: def fn = 'abc.log' def r1 = new FileReader(fn) Thread.sleep(60 * 1000) def r2 = new FileReader(fn) 假设日志文件经常滚动,但根据大小,根据“流量”,无法预测何时滚动。是否有方法确认读取器r1和r2指向同一文件(即填充是否滚动)?希望您不局限于仅使用文件读取器类。此解决方案使用具有文件名字符串的其他类 第一次尝试时,我发现。从名字来看,这似乎是个不错的候选人。。。创建第一个路径后,我将f

示例代码:

def fn = 'abc.log'
def r1 = new FileReader(fn)
Thread.sleep(60 * 1000)
def r2 = new FileReader(fn)

假设日志文件经常滚动,但根据大小,根据“流量”,无法预测何时滚动。是否有方法确认读取器
r1
r2
指向同一文件(即填充是否滚动)?

希望您不局限于仅使用
文件读取器
类。此解决方案使用具有文件名字符串的其他类

第一次尝试时,我发现。从名字来看,这似乎是个不错的候选人。。。创建第一个路径后,我将
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
这里运气不好

接下来我发现了。如果有一个created-date属性,看起来这可能会起作用。答对了


在上面的示例中,我将
file.txt
移动到
file.txt.2
并触摸了一个新的
file.txt
。请注意,我没有更改路径1。这将读取属性的当前值,因此您需要将初始值存储在一个变量中,以便与后面的属性值进行比较。

谢谢@doelleri-我实际上认为我仅限于读者。原因-我想打开所有文件,确认它们是我想打开的文件,然后再处理它们。可能在日志滚动示例中起作用,因为我只能根据您所说的内容检查
.log
文件,并重复打开读卡器。仍然想看看是否有一个通用的解决方案(即,我打开N个文件两次,如果读卡器匹配,我可以处理它们)。您必须实际读取这些文件,看看它们是否相同。阅读器对象永远不会是相同的。还要注意的是,虽然在这种情况下这不重要,但是在Linux中不可能获得文件创建时间
creationTime
属性似乎给出了与
lastModificationTime
相同的值。
groovy:000> fileTime = Files.getAttribute(path1, "creationTime")
===> 2014-10-21T17:30:31Z
groovy:000> assert fileTime != Files.getAttribute(path1, "creationTime")
===> null