8

ほら、問題は、Java ではlastmodified の日付を で取得できることfilename.lastModified()です。しかし、Windows では、ファイルが変更されるたびに、フォルダ全体ではなく、そのファイルの日付と時刻だけが変更されます。Javaを使用して、そのフォルダー内の1つのファイルでも最後に変更されたのはいつですか?

4

7 に答える 7

8

lastModified()ディレクトリのファイルで最新の(最大の)ファイルを検索します。ファイルがない場合は、ディレクトリ自体を使用します。

public static Date getLastModified(File directory) {
    File[] files = directory.listFiles();
    if (files.length == 0) return new Date(directory.lastModified());
    Arrays.sort(files, new Comparator<File>() {
        public int compare(File o1, File o2) {
            return new Long(o2.lastModified()).compareTo(o1.lastModified()); //latest 1st
        }});
    return new Date(files[0].lastModified());
}

参考までに、このコードはテスト済みです(そして動作します)。

于 2012-09-03T14:04:49.047 に答える
1

ファイルが作成/変更されてからフォルダーから削除される場合があるため、この方法ではフォルダーの正しい変更日を取得できないと思います。

次に、上記のロジックは、フォルダーに存在するファイルに基づいて最終変更日のみを表示します。削除されたものは考慮しません。

そのため、Java プログラムと OS の最終更新日を比較すると、異なる場合があります。

私見では、OS にクエリを実行して、フォルダーの最終更新日を取得する必要があります。

于 2014-04-17T03:01:50.593 に答える
0

Java7を使用している場合は、WatchService を使用できます。

于 2012-09-03T13:54:47.733 に答える
0

それがシステムまたはファイルシステムの更新を記録する方法である場合は、ディレクトリ内で再帰ループを実行する必要があるかもしれません。ディレクトリおよびサブディレクトリ内の各ファイルに対して、 を実行しlastModified、最新の値を保持します。

于 2012-09-03T13:58:49.013 に答える
0

私の見方では、次のように書くことができます(テストされていません):

long latestModified = 0;
File[] files = directory.listFiles();
for(File file : files) {
    if (latestModified < file.lastModified()) {
        latestModified = file.lastModified();
    }
}

latestModified使用できる変数です。

于 2012-09-03T13:59:04.800 に答える