Обновление метки времени файла в Windows из Java

Я имею дело с файлом в Java, который используется для хранения сериализованных объектов. Чтобы определить, истекло ли время для процесса записи в этот файл, я проверяю метод lastModified() в файле и ожидаю, что он будет обновляться каждый раз при записи объекта. В Linux и Mac это работает нормально, но в Windows отметка времени не обновляется до тех пор, пока FileOutputStream не будет закрыт. Я также попытался напрямую обновить отметку времени с помощью setLastModified(), но безрезультатно. Из того, что я почерпнул из Google, кажется, что это известное поведение с файлами в Windows.

У меня вопрос, как я могу добиться того, что я хочу в Windows? Мне просто нужно уметь определить, когда что-то было сериализовано. Суть в том, что сериализация и мониторинг находятся в разных JVM.

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

Спасибо

2 ответа

Решение

Если у вас есть контроль над исходным кодом для процесса записи, почему бы просто не написать или коснуться другого файла?

new File(otherFile.getParent(), "touch_file").setLastModified(Sytem.currentTimeMillis());

Не уверен, что это работает или вам нужно открыть и закрыть вместо этого:

new FileOutputStream(new File(otherFile.getParent(), "touch_file"))).close();

Кстати, в зависимости от файловой системы и т. Д. В Linux, lastModifiedTime для файлов может иметь разрешение и точность в 1 секунду.

Если вы используете Java 7, вы можете использовать java.nio.file.Files И его SetLastModifiedTime(Path, FileTime) статический метод.

Однако я не уверен, что это работает иначе, чем setLastModified в File.

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