2013-02-11 78 views
3

我有一組從其他地方抄在我的Windows目錄下的文件。 在檢查中的一個文件的屬性(右鍵 - >屬性),它表明:「上次訪問」與在Java(窗口)「上次修改」文件日期

創建:今天,2013年2月11日,下午2點51分56秒

修改:週二,1月1日,2013,上午八時30分04秒

訪問的:今天,2013年2月11日,下午二時51分56秒

「創建」和「接入」領域基本上顯示時間,該文件實際上是複製到新目錄,而「修改」字段顯示原始文件的修改日期。

在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

感謝您的答覆。但是這並不能解決問題。爲同一文件,上述系統輸出語句輸出是: 創建:星期一年02月11 14點50分08秒IST 2013 訪問的:星期一年02月11 16點05分16秒IST 2013 修改:星期一年02月11 14點52分09秒北京時間2013 雖然從窗戶屬性菜單,它顯示: 創建時間:今天,2013年2月11日,下午2時50分09秒 修改:週一,2012年11月19日,下午10時30分23秒 訪問的:今天,2013年2月11日,4:04:45 PM – tajji 2013-02-11 10:38:21

+0

在Windows上,javaxt-core庫直接從Windows API返回「上次修改」日期,所以它*應該*是正確的(即它調用GetFileAttributesExW函數並解析WIN32_FILE_ATTRIBUTE_DATA)。有誰知道可用於檢索複製文件的原始修改/創建日期的不同Windows API? – Peter 2013-02-12 02:55:00

+0

@tajji我使用代碼mjuarez對2011年創建的文件發佈了一個簡單的測試。這裏是來自javaxt的標準輸出: 創建時間:Thu Jan 19 09:25:08 EST 2012 訪問時間:Thu Jan 19 09:25:08 EST 2012 已修改:Mon Nov 28 09:15:34 EST 2011 我複製了文件使用Windows文件瀏覽器,並獲得新文件的以下標準輸出。 創建於:一月二月11 22:26:26東部標準時間2013年 訪問時間:星期一2月11日22:26:26東部時間2013年 修改時間:一月11日星期一09:15:34東部時間2011年 修改日期保持不變。此外,stdout中的日期與Windows屬性對話框中列出的日期相匹配。你的文件是如何複製的? – Peter 2013-02-12 03:53:15

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 2013-02-11 10:47:56

0

至於JavaXT,和Java 7沒有爲你工作,你的貓嘗試一些更奇特的方法,如果你願意堅持使用僅適用於Windows平臺。至於文件創建屬性在大多數* nix文件系統中不存在,所以它看起來不是很大的限制。

1)。的

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

pasre輸出工作示例here

2)。嘗試另一個「外部」庫。例如。 FileTimes

3)。你可以利用JNA來直接調用windows API函數。順便說一句,當我試圖找到代碼示例與JNA和文件屬性的功能,我發現this question,所以你的問題似乎是一個重複:-)

相關問題