Member 13941960 Ответов: 2

В отображении папки файлы были изменены/обновлены за последние 15 минут


Привет,

Я стараюсь, чтобы файлы в папке обновлялись последние 15 минут.
Но я получаю файлы, обновленные недавно в коде.
Кто-нибудь, пожалуйста, помогите мне в этом.

Что я уже пробовал:

File[] files = dir.listFiles();
File lastModifiedFile = files1[0];
for (int i = 1; i < files1.length; i++)
{
   if (lastModifiedFile.lastModified() < files[i].lastModified()) {
      lastModifiedFile = files[i];
      System.out.println(lastModifiedFile.getName());
   }
}

Richard MacCutchan

Где ваш тест на 15 - минутную разницу во времени?

Member 13941960

Я отредактировал файлы в каталоге и пытаюсь получить имя файла, которое обновляется последние 15 минут

Richard MacCutchan

И в чем же проблема?

Member 13941960

Я не могу получить обновленное имя файла..

Richard MacCutchan

Постарайтесь остановиться и подумать о том, какие именно результаты вы видите, а не какие ожидаете. Затем, пожалуйста, обновите свой вопрос точным кодом, который вы используете (а не выше, который даже не будет компилироваться), и объясните детали того, что именно происходит.

Member 13941960

File dir = новый файл(dirPath);
[Файл] файлы = реж.файл-список();
if (files == null || files.длина == 0)
{
возвращать null;
}
Файл lastModifiedFile = files[0];
для (int i = 1; i < files.длина; i++)
{
если (lastModifiedFile.lastModified() &ЛТ; файлы[я].lastModified())
{
lastModifiedFile = файлы[i];

Системы.из.код println(lastModifiedFile);

}
}
возврат lastModifiedFile;
}
Это был мой код ...
Я могу распечатать недавно обновленные имена файлов .
Точно так же я хочу напечатать имена файлов, загруженные за последние 15 минут.

Richard MacCutchan

Получите текущее время и сравните последнее измененное время с текущим - 15. Очень просто.

2 Ответов

Рейтинг:
2

Jochen Arndt

То lastModified время представлено в миллисекундах с начала эпохи. Так что все, что вам нужно, - это текущее время и разница в том же формате.

В течение 15 минут это может быть

import java.time.Instant;
// ...
Instant timestamp = Instant.now();
long timeLimitMillis = instant.toEpochMilli() - (15 * 60 * 1000);
// ...
if (files[i].lastModified() >= timeLimitMillis) 
{
    // Has been modified during the last 15 minutes
}


Member 13941960

Если я добавлю этот фрагмент в свой код, то программа будет прекращена.

Jochen Arndt

Программа или компилятор?
Вероятно, компилятор, потому что я забыл скобки для latsModified().

Member 13941960

Я добавил и попробовал это не работает

Jochen Arndt

У меня нет установленной Java, и поэтому я не могу ее протестировать здесь.
Так что "не работает" не говорит мне ничего полезного, чтобы это исправить.

Для быстрого тестирования вы можете вставить
System.out.println("описание" + значение);

Richard MacCutchan

Просто чтобы вы знали, что я плагиировал ваше предложение в своем решении выше.

Jochen Arndt

Без проблем.

Поэтому он не смог объединить мое решение со своим существующим кодом и даже не смог объяснить, где у него возникли проблемы с этим.

Richard MacCutchan

Да, и, к сожалению, это слишком распространенный ответ здесь, в QA.

Рейтинг:
16

Richard MacCutchan

Попробовать это:

long last15 = Instant.now().toEpochMilli(); // number of milliseconds since the epoch
last15 -= 15 * 60 * 1000; // less 15 minutes
File dir = new File(dirPath);
File[] files = dir.listFiles();
if (files == null || files.length == 0) 
{
    return null;
}
for (int i = 0; i < files.length; i++)
{
    if (files[i].lastModified() > last15)
    { 
        System.out.println(files[i]);
    }
}


Member 13941960

Спасибо это работает

Richard MacCutchan

Ну, я только скопировал предложение Йохена, ничего слишком сложного.