получить время модификации файла - PullRequest
3 голосов
/ 05 октября 2009

Я хочу написать код для отслеживания изменений файлов и реагирования на изменения. поэтому я пишу TimerTask, чтобы периодически проверять изменения файла но у меня есть проблема: когда файл открыт другими программами, такими как Excel или Word, и я закрываю файл без каких-либо изменений, значение File.lastModified () меняется. я также пытаюсь получить дату модификации, запустив скрипт оболочки dir, он работает нормально у него только минутная точность! Может кто-нибудь мне помочь? спасибо

Ответы [ 3 ]

2 голосов
/ 05 октября 2009

Я не вижу описанного вами поведения при использовании OpenOffice под Windows.

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Scanner;

public class CsvWriter {
    public static void main(String args[]) throws IOException {

        String fileName = "test.xls";
        File file = new File(fileName);

        PrintWriter out = new PrintWriter(new FileWriter(file));
        out.println("a,b,c,d");
        out.println("e,f,g,h");
        out.println("i,j,k,l");
        out.close();

        System.out.println("Before: " + new Date(file.lastModified()));

    // manual steps:    
        // open test.xls with OpenOffice
        // close test.xls
    // press enter

    System.in.read(); // wait until 'enter' is pressed

        System.out.println("After: " + new Date(file.lastModified()));
    }
}

выход:

Before: Mon Oct 05 10:01:27 CEST 2009

After: Mon Oct 05 10:01:27 CEST 2009

Может быть, вы могли бы опубликовать код, показывающий, как вы это делаете? А на какой платформе вы запускаете свое приложение?

2 голосов
/ 05 октября 2009

Word и Excel записывают ваше имя пользователя в файл при его открытии (чтобы другие пользователи могли видеть, кто работает над ним, когда они пытаются открыть файл). Поэтому правильно, что File.lastModified() меняется.

В Windows нет инструмента командной строки, который бы показывал вам время изменения в секундах.

0 голосов
/ 05 октября 2009

Если вам нужно точное время в среде Windows, взгляните на это:

Структура WinAPI FILETIME

Не все файловые системы могут записывать время создания и последнего доступа, и не все файловые системы записывают их одинаково. Например, в NT FAT время создания имеет разрешение 10 миллисекунд, время записи имеет разрешение 2 секунды, а время доступа имеет разрешение 1 день (в действительности, дата доступа). В NTFS время доступа имеет разрешение 1 час. Поэтому функция GetFileTime может не возвращать ту же информацию о времени файла, установленную с помощью функции SetFileTime. Кроме того, FAT записывает время на диске по местному времени. Однако NTFS записывает время на диск в формате UTC. Для получения дополнительной информации см. File Times.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...