2013-04-27 1 views
1

Правильно ли я полагаю, что java.io.File(file).lastModified() не приведет к загрузке самого файла и, следовательно, будет иметь минимальные накладные расходы? Это действительно основной вопрос, однако я не могу найти никакой хорошей информации об этом.Накладные расходы на получение метаданных файлов (последняя измененная дата)

И установка последней измененной даты не должна иметь почти никаких накладных расходов либо вправо?

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


На основе комментариев и ответов до сих пор, это означает, что он будет более производительным, чтобы сделать каталог слушает с фильтром для конкретно моего единственного файла? Так как звучит нет выступление ИМХО.

+0

Thocks: SecurityException - если существует менеджер безопасности, а его метод SecurityManager.checkRead (java.lang.String) отказывает ** читать доступ к файлу ** –

ответ

1

java.io.File(file) возвращает File объект. Таким образом, создается объект-файл.

Каждый раз, когда вы звоните file.lastModified(), он по-своему натолкнулся на вызов метода java.io.UnixFileSystem.getLastModifiedTime(File).

Опять же, это происходит каждый раз, когда вы звоните.

Так что это накладная часть вашей заботы.

+0

Что наводит на мысль, что это так же, как 'javaxt' на окнах: D Хорошо, могу ли я спросить, где и как вы нашли эту информацию? Просто чтобы я смог найти его в следующий раз, надеюсь, :) –

+0

Посмотрите на код 'File.lastModified(). Вы заметите что-то вроде 'return fs.getLastModifiedTime (this);' И вот для меня, 'java.io.UnixFileSystem.getLastModifiedTime (File) '- это реализация' FileSystem' для Linux, которая является родным методом. Это должно быть что-то подобное для других ОС. – Kowser

0

Я не уверен в этом. По словам Javadoc:

File.lastModified() - «Длинное значение, представляющее время файл последнего изменения, измеряется в миллисекундах, так как эпоха (00:00:00 GMT, 1 января 1970) или 0L если файл не не существует, или если ошибка ввода/вывода происходит "

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

+0

Если файл удаляется или перемещается, чем метаданные удаляются как от альтернативной системы, насколько я понимаю, поэтому просто факт, что java вызывает ошибку, не обязательно означает, что к файлу был обращен доступ. –

+0

Почему метаданные должны быть удалены? При удалении файла, на который вы ссылаетесь, изменений в «Файл» не происходит. –

+0

Поскольку, по крайней мере, в окнах с использованием 'javaxt' я обнаружил, что метаданные доступны через вызов API Windows, и в этом случае вызов выполняется, когда вызывается функция' lastModified', однако я не знаю, является ли это тем же java сама работает, и так ли это работает на Linux. О, хорошо, чтобы дать ему попробовать, тем не менее. –

Смежные вопросы