ファイルの最終更新日時の取得と設定(Files.getLastModifiedTime)

Files クラスで用意されている getLastModifiedTime メソッドを使用することで、指定したファイルの最終更新日時を取得することができます。また setLastModifiedTime メソッドを使用することで最終更新日時を指定した日時に設定することもできます。ここでは Java を使ってファイルの最終更新日時を取得または設定する方法について解説します。

(Last modified: )

ファイルの最終更新日時を取得する

ファイルの最終更新日時を取得するには Files クラスで用意されている getLastModifiedTime メソッドを使用します。 getLastModifiedTime メソッドはクラスメソッドです。書式は次のとおりです。

public static FileTime getLastModifiedTime(Path path, LinkOption... options) throws IOException

パラメータ:
path - ファイルへのパス
options - シンボリック・リンクの処理方法を示すオプション

戻り値:
ファイルが最後に変更された時間を表すFileTime。最終変更時間を示すタイムスタンプがそのファイル・システムによってサポートされていない場合は実装固有のデフォルト

例外:
IOException - 入出力エラーが発生した場合
SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされていて、そのcheckReadメソッドがファイルへの読取りアクセスを拒否する場合

1 番目の引数に最終更新日時を調べるファイルを表す Path オブジェクトを指定します。メソッドを実行すると、指定したパスが表すファイルの最終更新日時を FileTime クラスのオブジェクトとして返します。

※ Path オブジェクトを使ってファイルやディレクトリを表す方法については「Pathオブジェクトを使ってファイルやディレクトリを表す」を参照されてください。

次のサンプルをみてください。

Path p = Paths.get("C:/code/java/file/report.txt");

try{
  FileTime fileTime = Files.getLastModifiedTime(p);
  System.out.println(fileTime);
}catch(IOException e){
  System.out.println(e);
}

C:\code\java\file ディレクトリの中の report.txt ファイルの最終更新日時を取得し画面に表示します。なお取得できる日時は UTC (協定世界時)のものとなります。このあとのサンプルコードでは JST (日本標準時) に変換する方法を掲載しています。

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample10-1.java という名前で保存します。

import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.io.IOException;
import java.nio.file.attribute.FileTime;
import java.time.Instant;
import java.time.ZoneId;
import java.time.LocalDateTime;

class JSample10_1{
  public static void main(String[] args){
    Path p = Paths.get("C:/code/java/file/doc/memo.txt");

    try{
      FileTime fileTime = Files.getLastModifiedTime(p);
      Instant instant = fileTime.toInstant();
      LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());

      System.out.println(localDateTime);
    }catch(IOException e){
      System.out.println(e);
    }
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample10_1.java

その後で、次のように実行してください。

java JSample10_1

ファイルの最終更新日時を取得する(1)

指定のファイルの最終更新日時を取得し、ローカルタイムに変換したあとで画面に出力しました。実際の最終更新日時と一致していることが確認できます。

ファイルの最終更新日時を取得する(2)

ファイルの最終更新日時を設定する

ファイルの最終更新日時は取得するだけでなく設定することもできます。設定するには Files クラスで用意されている setLastModifiedTime メソッドを使用します。 setLastModifiedTime メソッドはクラスメソッドです。書式は次のとおりです。

public static FileTime getLastModifiedTime(Path path, LinkOption... options) throws IOException

パラメータ:
path - ファイルへのパス
time - 新しい最終変更時間

戻り値:
指定されたパス

例外:
IOException - 入出力エラーが発生した場合
SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされていて、そのcheckWriteメソッドがファイルへの書込みアクセスを拒否する場合

1 番目の引数に最終更新日時を設定するファイルを表す Path オブジェクトを指定します。 2 番目の引数に設定する新しい最終更新日時を FileTime クラスのオブジェクトで指定します。

次のサンプルをみてください。

Path p = Paths.get("C:/code/java/file/index.html");

try{
  FileTime fileTime = FileTime.from(Instant.now());
  Files.setLastModifiedTime(p, fileTime);
}catch(IOException e){
  System.out.println(e);
}

C:\code\java\file ディレクトリの中の index.html ファイルの最終更新日時を現在の日時に設定します。

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample10-2.java という名前で保存します。

import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.io.IOException;
import java.nio.file.attribute.FileTime;
import java.time.Instant;

class JSample10_2{
  public static void main(String[] args){
    Path p = Paths.get("C:/code/java/file/doc/memo.txt");

    try{
      FileTime fileTime = FileTime.from(Instant.now());
      Files.setLastModifiedTime(p, fileTime);
    }catch(IOException e){
      System.out.println(e);
    }
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample10_2.java

指定のファイルの最終更新日時は現在次のようになっています。

ファイルの最終更新日時を設定する(1)

その後で、次のように実行してください。

java JSample10_2

ファイルの最終更新日時を設定する(2)

指定のファイルの最終更新日時が現在の日時に設定されました。再度対象のファイルの最終更新日時を確認してみると変更されていることが確認できます。

ファイルの最終更新日時を設定する(3)

-- --

Java を使ってファイルの最終更新日時を取得または設定する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。