Есть еще один похожий вопрос на StackOverflow ( как получить дату создания файла на Java ), но ответа на самом деле нет, поскольку у OP была другая потребность, которую можно было решить с помощью других механизмов. Я пытаюсь создать список файлов в каталоге, который можно отсортировать по возрасту, отсюда и необходимость в дате создания файла.
Я не нашел хорошего способа сделать это после долгого рыскания в сети. Есть ли механизм получения дат создания файлов?
Кстати, в настоящее время в системе Windows, возможно, это понадобится для работы и в системе Linux. Кроме того, я не могу гарантировать, что будет соблюдаться соглашение об именах файлов, если дата / время создания встроены в имя.
java
date
filesystems
Тодд
источник
источник
Ответы:
В Java nio есть опции для доступа к createTime и другим метаданным, если их предоставляет файловая система. Проверить эту ссылку из
Например (предоставлено на основе комментария @ ydaetskcoR):
источник
readAttributes(file.toPath(), BasicFileAttributes.class)
еще вы получите:no suitable method found for readAttributes(File,Class<BasicFileAttributes>) method Files.<A>readAttributes(Path,Class<A>,LinkOption...) is not applicable (cannot infer type-variable(s) A (argument mismatch; File cannot be converted to Path))
statx
системный вызов был добавлен в более новую версию ядра Linux.Я решил эту проблему с помощью JDK 7 с помощью этого кода:
источник
В продолжение этого вопроса - поскольку он относится конкретно ко времени создания и обсуждает его получение с помощью новых классов nio - кажется, что прямо сейчас в реализации JDK7 вам не повезло. Приложение: такое же поведение и в OpenJDK7.
В файловых системах Unix вы не можете получить метку времени создания, вы просто получаете копию времени последней модификации. Так грустно, но, к сожалению, это правда. Я не уверен, почему это так, но код специально делает это, как показано ниже.
источник
stat
не работает. Если только вы не запускаете ядро выше 4.11 с glibc выше 2.28 и coreutils выше 8.31, тогдаstat
будет сообщено о рождении файла. См. Соответствующий ответ unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4/… В настоящее время JDK не использует statx syscal.Это базовый пример того, как получить дату создания файла с
Java
помощьюBasicFileAttributes
класса:источник
В системе Windows вы можете использовать бесплатные FileTimes библиотеку .
В будущем это будет проще с Java NIO.2 (JDK 7) и пакетом java.nio.file.attribute. .
Но помните, что большинство файловых систем Linux не поддерживают отметки времени создания файлов .
источник
API
java.io.File
поддерживает только получение времени последнего изменения . И в Интернете тоже очень тихо по этой теме.Если я не пропустил что-то существенное, библиотека Java как есть (вплоть до Java 7, но еще не включая) не включает эту возможность. Поэтому, если вы отчаянно в этом нуждались, одним из решений было бы написать код C (++) для вызова системных подпрограмм и вызвать его с помощью JNI. Однако большая часть этой работы, похоже, уже сделана за вас в библиотеке JNA .
Тем не менее, вам может потребоваться немного кодирования для конкретной ОС на Java, поскольку вы, вероятно, не найдете те же системные вызовы, доступные в Windows и Unix / Linux / BSD / OS X.
источник
File
класс не имеет такой возможности, заключается в том, что большинство файловых систем даже не отслеживают эту информацию. А те, кто этого не делает, не всегда соглашаются, когда его следует обновлять.touch
для изменения времени мода, а затем снова проверить.в java1.7 + Вы можете использовать этот код, чтобы узнать время создания файла!
источник
Instant.ofEpochMilli(date)
. Спасибо