如何计算每小时的文件数量,具体取决于他们最近修改过的"

时间:2017-04-05 12:53:48

标签: java count average last-modified directorystream

我正在开发一种工具来计算来自其他程序的已归档文件。因此,我使用DirectoryStream并过滤子目录和一些带有简单if子句的文件(如下所示)。

对于我想知道的统计数据,平均每小时创建了多少文档。

我在处理文件和目录方面经验不足,但我猜有某种" getLastModified",将时间范围从最旧到最年轻,并计算平均文档数每小时?

1 个答案:

答案 0 :(得分:1)

好吧,文件有lastModified()方法,返回上次修改的时间戳。如果文件不存在或发生I / O错误,则返回0。要将Path转换为File,您可以使用toFile()方法。有了它,计算文件/小时平均值将相当容易:

long minTimestamp = Long.MAX_VALUE; // definitely greater than any timestamp you will ever find
long maxTimestamp = 0;
int count = 0;

try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(Paths.get("DIRECTORY PATH"))) {
    for(Path path: directoryStream) {
        if (!(Files.isDirectory(path) || path.toString().endsWith("\\databaseinfo.xml") || path.toString().endsWith(".log"))) {
            long lastModified = path.toFile().lastModified();
            if (lastModified > 0L) { // check that no error occurred
                if (lastModified < minTimestamp) minTimestamp = lastModified; // new minimum
                if (maxTimestamp < lastModified) maxTimestamp = lastModified; // new maximum
            }
            count = count + 1;
        }
    }

} catch (IOException e) {
    e.printStackTrace();
}
System.out.println(count);
double filesPerHour = 0;
if (maxTimestamp != minTimestamp) { // avoid division by 0
    filesPerHour = (double) count * 60 * 60 * 1000 / (maxTimestamp - minTimestamp); // 60 * 60 * 1000 = milliseconds in one hour
}
System.out.println(filesPerHour);

编辑:反转if条件,以避免在else块中有代码的空if语句