2

ファイルの最終変更時刻は、ファイルが閉じられたときにのみ変更されます。

public class Main {
    public static void main(String[] args) throws IOException {
        File f = new File("xyz.txt");

        FileWriter fwr = new FileWriter(f);
        System.out.println(f.lastModified());
        fwr.write("asasdasdasd");
        System.out.println(f.setLastModified(System.currentTimeMillis()));
        fwr.flush();
        System.out.println(f.lastModified());
        fwr.close();
        System.out.println(f.lastModified());
        System.out.println(f.setLastModified(System.currentTimeMillis()));      
    }
}

さて、私の実際のプログラムでは、ファイルが開かれ、スレッドの1つがファイルを書き込み続けます。他のいくつかのスレッドは、データが最後にファイルに書き込まれたのはいつかを知る必要があります。

ファイルを閉じずに最終更新を更新する方法はありますか?(ファイルを書き込むスレッドにstatic変数long lastWriteTimeがあると機能しますが、ファイルを閉じずに最終変更時刻を変更する他の方法があるかどうかを知りたいだけです。)

4

3 に答える 3

2

実際に達成したいことによっては、次の2つの方法のいずれかが適切な場合があります。

  • File.setLastModified()タイムスタンプを直接操作するために使用するか、
  • f.flush()書き込まれるすべてのデータが実際にディスクに書き込まれるようにするために使用します。

OSやファイルシステムのタイムスタンプの解像度が期待よりも低い場合があることに注意してください。たとえば、FATはこれらのタイムスタンプを2秒の解像度で保存します。さらに最近のファイルシステムは、1秒の解像度でしか保存できないことが知られています。

また、最後に変更されたタイムスタンプの動作は、OSによって大きく異なることに注意してください。たとえば、私のUbuntuでは、write/だけflushがタイムスタンプを変更しますが、変更しclose() ません

于 2011-04-19T09:50:26.453 に答える
2

表示される動作は、OSおよびおそらくファイルシステムの種類に大きく依存することに注意してください。したがって、javaは、ファイル時刻がいつ更新されるかを指定できません。したがって、いいえ、Javaでそれを行うための移植可能な方法はありません。

于 2011-04-19T09:52:36.717 に答える
0

setLastModified()を使用するのはどうですか?

于 2011-04-19T09:52:41.817 に答える