2

以下のコードを使用して、最終アクセス時刻を取得できます。

public Date getLastAccessTime(String filePath) throws IOException {
    File f = new File(filePath);
    BasicFileAttributes basicFileAttributes = Files.getFileAttributeView(
        f.toPath(),
        BasicFileAttributeView.class).readAttributes();
    Date accessTime = new Date(basicFileAttributes.lastAccessTime().toMillis());
    return accessTime;
}

しかし、私のLinuxシステムでは、/ etc/fstabで「relatime」として構成されています。

正確な最終アクセス時刻を取得するには、/ etc / fstabで「atime」を有効にする必要がありますか?

4

1 に答える 1

4

正確な最終アクセス時刻を取得するには、/ etc / fstabで「atime」を有効にする必要がありますか?

簡単な答え:はい

Linuxでは、JDKはsys_stat64()syscallを使用してファイルに関する情報を取得します。ファイルにアクセスしたときにカーネルがフィールドを更新しない場合、st_atimeJavaはこの情報を取得できません。

st_atime更新ポリシーに関するLinuxカーネルのデフォルトの動作は、Linux2.6.30によって変更されました。relatime現在、デフォルトの動作です。これは、またはが更新されたst_atimeときにのみ更新され、ファイルにアクセスされたときには更新されないことを意味します。古い動作が必要な場合は、を使用できます。詳細については、マウントのマニュアルページを参照してください(、、、、を検索してください)。st_mtimest_ctimestrictatimeatimenoatimerelatimestrictatime

于 2013-03-21T13:14:59.043 に答える