Как рассчитать количество документов в час в зависимости от их "последнего изменения"

Я работаю над инструментом для подсчета архивных файлов из другой программы. Для этого я использую DirectoryStream и подкаталоги filter и некоторые файлы с простым условием if (показано ниже).

Для статистики я хотел бы знать, сколько документов было создано в среднем за час.

Я не очень опытен в работе с файлами и каталогами, но я предполагаю, что есть какой-то "getLastModified", переводящий Timerange от самого старого к младшему и вычисляющий среднее количество документов в час?

1 ответ

Решение

Ну, файлы имеют lastModified() метод, возвращающий метку времени последней модификации. Возвращает 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, чтобы избежать пустого оператора if с кодом в блоке else

Другие вопросы по тегам