检查FileReader是否是同一个文件

时间:2014-10-21 16:04:30

标签: groovy

示例代码:

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

让我们说日志文件经常滚动,但根据大小,根据"流量",它不可预测。有没有办法确认读者r1r2指向同一个文件(即填充是否滚动)?

1 个答案:

答案 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。这将读取属性的当前值,因此您需要将初始值存储在变量中以与后面的属性值进行比较。