Обновление метки времени файла в 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.