在使用
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
類別只能得到檔案的最近修改時間,若要取得像上列的檔案內容中的修改日期以及存取日期的話,就要用到
NIO中
java.nio.file套件下的
Files、
Path、
Paths這三個類別:
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