lastModifiedメソッド - Fileクラス - 萌えJava超入門
Fileクラス

lastModifiedメソッド

このファイルが最後に変更された時間を返します。

lastModified()

目次

1. 時間や日時は long型 で表します


「日時」は特定の日や、特定の時刻のこと。何月何日何時何分何秒 という感じです。
「時間」はある日時から ある日時までの間の長さのこと。何時間 何秒間 という感じです。
javaでは、時間や日時を long型 の値として扱います

時間については、常に 1L==1ミリ秒 で良いのですが、
日時は、人間が日時とわかる文字列 にするのに、ひと工夫必要になります。
日時には、うるう年やタイムゾーンがあって、一筋縄ではいきません。
Javaには、日時を扱うクラスが用意されていますので、それらを使用しましょう。
このページでは、String.formatメソッド を使用します。

萌えJava超入門 萌えJava超入門
日時はなんか
めんどくさそうっスね。
萌えJava超入門
否定はしないけど、
割と何とかなるよ。

重要
  • javaでは、時間や日時を long型 の値として扱います
  • 1L==1ミリ秒です
  • long型なので、小数点以下はナシで、マイナスはアリです
  • 日時は、1970/01/01 00:00:00 000 が起点です(注)
(注) 世界標準時「1970/01/01 00:00:00」が基準です。
   タイムゾーンが「日本-東京」のパソコンはロンドンから9時間の時差があるので
   「1970/01/01 09:00:00 000」が起点になります。
   とは言え実際にタイムゾーンを気にする場面は、ほぼ無いでしょう。
   Sample12_00.java

long のリテラル
 long のリテラルは、数値の後ろに「l」又は「L」(英数字のエル)です。
 そのままの数値は、int のリテラルとして扱われますので、
 intの範囲を超える数値はエラーになります。
 ご留意ください。

 ご参照↓
  基本データ型一覧
萌えJava超入門
これ割とハマるやつだ。
365日==31536000000ミリ秒で、
int ならアウトだ。
リテラルなら、31536000000L と書こう。


2. lastModifiedメソッド


ファイルの「更新日時」を、long型 で返します。

 public long lastModified()
            

lastModifiedメソッド 書式
File file;
 long lng = file.lastModified();

萌えJava超入門 萌えJava超入門 萌えJava超入門
ファイルの更新日時は
わかるだろ?
これのことだ。
更新日時
Windowsファイルプロパティ Linuxファイルプロパティ
ファイルを選択して「Alt」+「Enter」。
テンキーの「Enter」だとダメな場合があります。



3. サンプルコード


前回作成した「Sample11_02.class」の更新日を調べてみましょう。
ここでは、long型で得た日時データを、
String.formatメソッドを利用して日付文字列にしています。

//Sample12_01.java

import java.io.File;

class Sample12_01{
    public static void main(String[] args){

        File file = new File("Sample11_02.class");
        long last = file.lastModified();
        System.out.println(last);
        String strDate = String.format(
              "%1$tY%1$tm%1$td%1$tH%1$tM%1$tS%1$tLミリ秒",
              last);
        System.out.println(strDate);
    }
}

コマンドライン
>cd ws
ws>javac -encoding UTF-8 Sample12_01.java
ws>java Sample12_01
1626659435391   ← long型での値。
2021年07月19日 10時50分35秒 391ミリ秒

ws>

萌えJava超入門
String.format のくだりが
えらい長くなってしまったが、
実際には必要な部分だけ使えばいい。
萌えJava超入門 萌えJava超入門
なるほど。
ちなみに、「更新日」って
何に使えるの?


lastModifiedメソッドは、ファイルのリストを古い順に並べ替えたり、
最も新しいファイルを探したりするのに良く用います。
この様な場合は long型のまま利用できます。

月別にディレクトリを分ける様な場合には、年と月だけを取り出して使うといいでしょう。
今後、日付を取り扱うクラスも紹介させていただきますが、
実践では、String.formatメソッドで、かなり対応できますよ。

年と月だけを取り出す例
String strDate = String.format("%1$tY_%1$tm, last);



4. 最も新しいファイルを探す

listFilesメソッドを利用して取得したFile配列の中から、
最も更新日が新しいファイル、又はディレクトリを探してみましょう。
大小関係であれば、long型のまま比較するのが良いでしょう。

//Sample12_02.java

import java.io.File;

class Sample12_02{
    public static void main(String[] args){

        File dir01 = new File(".");
        File[] files = dir01.listFiles();

        if(files!=null){
            int lastestIndex = 0;
            long maxModi = files[0].lastModified();
            if(files.length>1){
                for(int i=1; i<files.length; i++){
                    long modi = files[i].lastModified();
                    if(modi>maxModi){
                        maxModi = modi;  //大きい方の更新日を保存
                        lastestIndex = i;  //↑のインデックスを保存
                    }
                }
            }
            File lastestFile = files[lastestIndex];
            System.out.println("lastestFile: " + lastestFile.getPath());
            String strDate = String.format(
                "%1$tY/%1$tm/%1$td %1$tH:%1$tM",
                maxModi
                );

            System.out.println("lastModified: " + strDate);
        }else{
            System.out.println("is null.");
        }
    }
}

コマンドライン
>cd ws
ws>javac -encoding UTF-8 Sample12_02.java
ws>java Sample12_02
lastestFile: ./Sample12_02.class
lastModified: 2021/07/20 10:58

ws>

萌えJava超入門 萌えJava超入門
大きい方の lastModified の値と
その値があったインデックスの
2つを保持しているのね。
萌えJava超入門
そう。
要素そのものを保持するより
スマートじゃない?


時間や日時の取り扱いについては、いずれ紹介させていただきますね。



お疲れ様でした。




© 2019 awasekagami