2015年1月7日 星期三

【筆記】Java取得檔案的建立時間、修改日期,以及存取日期

在使用Java處理檔案時,有些時候會需要去取得檔案的一些如建立時間、修改日期或存取日期等資訊,如:


1.6以前,可以使用File類別來取得最近的修改日期:
String strPath = "D:/_javakid/test.txt";
		
File file = new File(strPath);
		
Calendar c = Calendar.getInstance();
c.setTimeInMillis(file.lastModified());
	
System.out.println(strPath + " 上次修改時間為:" 
			+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
但使用File類別只能得到檔案的最近修改時間,若要取得像上列的檔案內容中的修改日期以及存取日期的話,就要用到NIOjava.nio.file套件下的FilesPathPaths這三個類別:
System.out.println("使用nio...");
Path path = Paths.get(strPath);
BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);

c.setTimeInMillis(attrs.creationTime().toMillis());
System.out.println(strPath + " 建立時間為:" 
		+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));

c.setTimeInMillis(attrs.lastModifiedTime().toMillis());
System.out.println(strPath + " 上次修改時間為:" 
		+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));

c.setTimeInMillis(attrs.lastAccessTime().toMillis());
System.out.println(strPath + " 上次存取時間為:" 
		+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
使用上要注意的是,上列三個類別都是在JDK 1.7之後才存在的,要使用這些類別,要先把電腦的JDK升級到1.7以上。

完整程式碼如下:
package idv.jk.io;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class FileModificationReader 
{
	public static void main(String[] args) throws IOException
	{
		String strPath = "D:/_javakid/test.txt";
		
		File file = new File(strPath);
		
		Calendar c = Calendar.getInstance();
		c.setTimeInMillis(file.lastModified());
	
		System.out.println(strPath + " 上次修改時間為:" 
							+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
		
		System.out.println("使用nio...");
		Path path = Paths.get(strPath);
		BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
		
		c.setTimeInMillis(attrs.creationTime().toMillis());
		System.out.println(strPath + " 建立時間為:" 
				+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
		
		c.setTimeInMillis(attrs.lastModifiedTime().toMillis());
		System.out.println(strPath + " 上次修改時間為:" 
				+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
		
		c.setTimeInMillis(attrs.lastAccessTime().toMillis());
		System.out.println(strPath + " 上次存取時間為:" 
				+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
		
	}
}
執行結果為:
D:/_javakid/test.txt 上次修改時間為:2015-01-07 18:27:39
使用nio...
D:/_javakid/test.txt 建立時間為:2015-01-05 15:12:59
D:/_javakid/test.txt 上次修改時間為:2015-01-07 18:27:39
D:/_javakid/test.txt 上次存取時間為:2015-01-07 18:27:12

沒有留言: