2013-02-11 4 views
3

У меня есть набор файлов в моей директории windows, которые копируются из других источников. При проверке свойств одного из файлов (правой кнопкой мыши -> Свойства), он показывает:"last accessed" vs "last modified" file date in java (windows)

Создано: Сегодня, 11 февраля 2013, 2:51:56 PM

Modified: Вторник, 1 января , 2013, 8:30:04 AM

Accessed: Сегодня, 11 февраля 2013, 2:51:56 PM

"Создано" и "Accessed" поля в основном показывают время, что файл был фактически скопирован в новый каталог, в то время как в поле «Модифицированное» отображается измененная дата исходного файла.

В Java при использовании file.lastModified() то, что я получаю, это метка «Доступ» (или «Создана»). Есть ли способ получить «Модифицированное» значение исходного файла?

ответ

2

Вы можете добавить this JavaXT library, и тогда вы будете в состоянии сделать что-то вроде этого:

javaxt.io.File file = new javaxt.io.File("/tmp/file.txt"); 
System.out.println("Created: " + file.getCreationTime()); 
System.out.println("Accessed: " + file.getLastAccessTime()); 
System.out.println("Modified: " + file.getLastModifiedTime()); 
+0

Спасибо за ответ. Но это не решает проблему. Для того же файла вывод операторов sysout выше: Создано: Пн 11 Фев 14:50:08 IST 2013 Доступ к: Пн Фев 11 16:05:16 IST 2013 Изменено: Пн 11 Фев 14:52:09 IST 2013 Пока из меню свойств окон отображается: Создано: Сегодня, 11 февраля 2013 года, 2:50:09 вечера Изменено: понедельник, 19 ноября 2012 г., 10:30:23 PM Доступ: Сегодня , 11 февраля 2013 года, 4:04:45 PM – tajji

+0

В Windows библиотека javaxt-core возвращает дату «последнего изменения» непосредственно из Windows API, поэтому она должна быть корректной (т.е. она вызывает функцию GetFileAttributesExW и анализирует WIN32_FILE_ATTRIBUTE_DATA). Кто-нибудь знает о другом API Windows, который можно использовать для извлечения исходной даты изменения/создания скопированного файла? – Peter

+0

@tajji Я проверил простой тест, используя код mjuarez, опубликованный в отношении файла, созданного в 2011 году.Вот stdout из javaxt: Создано: Чт янв 19 09:25:08 EST 2012 Доступ: Чт Янв 19 09:25:08 EST 2012 Изменено: Пн ноя 28 09:15:34 EST 2011 Я скопировал файл используя Windows file explorer и получил следующий stdout для нового файла. Создано: Пн Фев 11 22:26:26 EST 2013 Доступен: Пн Фев 11 22:26:26 EST 2013 Изменено: Пн Ноя 28 09:15:34 EST 2011 Измененная дата не изменилась. Кроме того, даты в stdout соответствуют датам, указанным в диалоговом окне свойств Windows. Как были скопированы ваши файлы? – Peter

3

Наряду с использованием «внешнего» библиотеки (например, упомянутый JavaXT) в Java 7 вы можете также использовать новый файл API (ознакомьтесь с этим Java 7 nio.2 tutorial).

File attribFile = new File("/tmp/file.txt"); 
Path attribPath = attribFile.toPath(); 
BasicFileAttributeView basicView = 
    attribPath.getFileAttributeView(BasicFileAttributeView.class); 
BasicFileAttributes basicAttribs = basicView.readAttributes(); 

System.out.println("Created: " + basicAttribs.creationTime()); 
System.out.println("Accessed: " + basicAttribs.lastAccessTime()); 
System.out.println("Modified: " + basicAttribs.lastModifiedTime()); 

Заканчивать this article для дополнительных образцов.

+0

Спасибо, звучит интересно, что Java 7 имеет эту новую функцию, но позже попробует Java 7. Нужно, чтобы это работало на Java 6 для проекта прямо сейчас :). Библиотека JavaXT, упомянутая выше, мало помогла. – tajji

0

Что касается JavaXT и Java 7, для вас это не сработало, вы можете попробовать более экзотические подходы, если вы готовы придерживаться только платформы Windows. Поскольку атрибут создания файла не существует в большинстве файловых систем * nix, это не похоже на большие ограничения.

1). pasre выход

Runtime.getRuntime().exec("cmd /c dir c:\\logfile.log /tc"); 

рабочий пример here

2). Попробуйте другую «внешнюю» библиотеку. Например. FileTimes

3). Вы можете использовать JNA для непосредственного вызова функций API Windows. BTW, когда я попытался найти пример кода с функциями JNA и атрибутов файлов, я нашел this question, поэтому ваш вопрос кажется дублирующим :-)

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