Мне интересно, какие типы программного поведения считаются «изменением» файла в java. То есть, какие операции, которые я мог бы выполнить с файлом, заставили бы вызов file.lastModified () изменить его значение?

I.E. Открытие? Читаете? Пишу? Копирование? Письмо - очевидный спусковой крючок, но остальные не так очевидны. Я поискал в Интернете и не увидел ничего сразу.

Уточнение: я не пытаюсь установить время последнего изменения, я просто пытаюсь определить, какие программные действия, которые могут выполнять Java-программы, могут привести к обновлению этого значения. Очевидно, что запись в файл сделает это. Но есть ли другие случаи, которые действительно вызывают это?

0
Nathaniel 14 Фев 2013 в 23:10
Флаг «Последнее изменение» - это функция операционной системы; java просто передает вам это значение. Все, что может изменить один байт в файле, должно изменить дату «последнего изменения»; как и прикосновение.
 – 
Robert Harvey
14 Фев 2013 в 23:13
Спасибо за комментарий, я понимаю, что флаг - это функция ОС. Я пытаюсь выяснить, что может вызвать обновление этого флага в моей программе.
 – 
Nathaniel
14 Фев 2013 в 23:20
Вместо того, чтобы размышлять о том, что может быть причиной, ваше время может быть лучше потрачено на отслеживание точки в вашем коде, в которой срабатывает изменение LastModified.
 – 
Robert Harvey
14 Фев 2013 в 23:22
Я ценю это, но я надеялся, что где-то есть список, в котором перечислены операции.
 – 
Nathaniel
14 Фев 2013 в 23:24
Открытие и чтение файла не меняют его. Запись в него изменяет его. Вам не нужен список.
 – 
user207421
15 Фев 2013 в 07:06

1 ответ

Лучший ответ

Чтение зависит от открытия, Копирование зависит от чтения. Запись - единственный триггер для установки штампа «Последнее изменение». После открытия файла в большинстве операционных систем вам необходимо указать, в каких режимах вы хотите открыть файл. например rw или r, или w, или a (добавить) и т. Д. (Зависит от реализации / ОС). Поскольку a включает w, w - единственная операция, которая устанавливает отметку "Последнее изменение".

Классы Java (такие как FileInputStream) откроют файл с указанием r или "чтение" - так что это не вызовет штамп LastModified. В Java есть отдельные классы для читателей и писателей - ввод и вывод. Классы ввода / чтения (Reader, InputStream) не устанавливают штамп LastModified. Однако простой Open-For-Write (без фактического написания), скорее всего, также вызовет штамп LastModified, то есть:

new FileOutputStream( new File( "path/to/file.extension" ) );

Скорее всего, вызовет набор LastModified.

С уважением.

0
Danyel 15 Фев 2013 в 00:03
Не совсем правильно говорить, что это вызовет изменение lastModified. Он создаст полностью новый файл с новой датой создания, а также с новой датой последнего изменения.
 – 
user207421
15 Фев 2013 в 07:07