Последнее изменение файла, не закрывая его - PullRequest
1 голос
/ 19 апреля 2011

Время последнего изменения файла изменяется только при закрытии файла.

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()));      
    }
}

Теперь, в моей настоящей программе, файл открывается, и один из потоков продолжает записывать файл. несколько других потоков должны знать, когда в последний раз были записаны какие-либо данные в файл.

Есть ли какой-нибудь возможный способ обновления последней модификации без закрытия файла? (Я знаю, что переменная static - long lastWriteTime в потоке, который пишет файл, будет работать. Но мне просто интересно узнать, есть ли другой способ изменить время последнего изменения без закрытия файла.)

Ответы [ 3 ]

2 голосов
/ 19 апреля 2011

В зависимости от того, что вы на самом деле хотите достичь, может подойти один из двух методов:

  • используйте File.setLastModified() для прямой манипуляции с временной меткой или
  • используйте f.flush(), чтобы гарантировать, что все записанные данные фактически записаны на диск.

Обратите внимание, что ОС и / или файловая система могут иметьболее низкое разрешение этой временной метки, чем вы надеетесь.Например, FAT сохраняет эти временные метки с разрешением 2 секунды!Известно, что даже более современные файловые системы хранятся только с разрешением в одну секунду.

Также обратите внимание, что поведение последней измененной временной метки сильно варьируется в зависимости от ОС.Например, в моем Ubuntu только write / flush изменяет метку времени, close() не !

1 голос
/ 19 апреля 2011

Имейте в виду, что поведение, которое вы видите, сильно зависит от ОС и, возможно, типа файловой системы. Следовательно, Java не может и не указывает, когда время файла обновляется. Поэтому нет, в Java нет переносимого способа сделать это.

0 голосов
/ 19 апреля 2011

Как насчет использования setLastModified ()?

...