Как я нахожу последний измененный файл в каталоге в Java?

Как я нахожу последний измененный файл в каталоге в Java?

23
задан James McMahon 14 January 2010 в 14:24
поделиться

4 ответа

private File getLatestFilefromDir(String dirPath){
    File dir = new File(dirPath);
    File[] files = dir.listFiles();
    if (files == null || files.length == 0) {
        return null;
    }

    File lastModifiedFile = files[0];
    for (int i = 1; i < files.length; i++) {
       if (lastModifiedFile.lastModified() < files[i].lastModified()) {
           lastModifiedFile = files[i];
       }
    }
    return lastModifiedFile;
}
45
ответ дан 29 November 2019 в 00:58
поделиться

Вы можете получить время последней модификации, используя метод file.lastmodified (). Мое предложенное решение было бы реализовать пользовательский компаратор, который сортирует в LastModified () - заказа и вставлять все файлы в каталоге в элементах, которые сортируют этот компаратор.

Неповедочный пример:

SortedSet<File> modificationOrder = new TreeSet<File>(new Comparator<File>() {
    public int compare(File a, File b) {
        return (int) (a.lastModified() - b.lastModified());
    }
});

for (File file : myDir.listFiles()) {
    modificationOrder.add(file);
}

File last = modificationOrder.last();

Решение, предложенное Bozho, вероятно, является быстрее, если вам нужен только последний файл. С другой стороны, это может быть полезно, если вам нужно сделать что-то более сложное.

4
ответ дан 29 November 2019 в 00:58
поделиться

Компаратор в растворе Эмиля будет уборщиком таким способом

public int compare(File a, File b) {
    if ((a.lastModified() < b.lastModified())) {
        return 1;
    } else if ((a.lastModified() > b.lastModified())) {
        return -1;
    } 
    return 0;
}

литье (а.lastmodified () - b.lastmodified ()) - INT может вызвать неожиданные результаты.

1
ответ дан 29 November 2019 в 00:58
поделиться

Вы пытались аннотировать исключение с помощью @ WebFault ? Кроме того, реализуется getFureInfo () ?

EDIT: Я понимаю, что мой ответ был недостаточно подробным. Как напоминается в , этот поток (например):

Спецификация JAX-WS 2.0 требует что исключение аннотировано с помощью @ WebFault должен иметь два конструктора и один метод [получения для получения информации об ошибке]:

 WrapperException (строковое сообщение, FureBean fureInfo)
WrapperException (строковое сообщение, FureBean fiveInfo, причина, допускающая изменение)
FureBean getFureInfo ()

Исключение оболочки заменено на имя исключения, и FureBean заменяется классом имя, реализующее компонент отказа. Компонент отказа - это компонент Java, который содержит информацию об ошибке и используется клиентом веб-службы знать причину ошибки.

Это подробно описано в разделе 2.5 Отказ спецификации JAX-WS. Соответствует ли этому ваше исключение? Можете ли вы опубликовать код?


OP прав. В соответствии со спецификацией 2,1, раздел 3,7 Исключение для конкретной услуги, не требуется использовать аннотацию @ WebFault , JAX-WS может динамически генерировать фасоль обертки для исключений, которые не соответствуют образцам, описанным в разделе 2,5 (просто предоставьте получатель информации, которая должна присутствовать в сбое). Для исключений, соответствующих образцов, описанным в разделе 2,5 (т.е. исключений, имеющих метод getFureInfo и аннотацию @ WebFault ), при сопоставлении исключения со схемой XML в качестве входных данных для JAXB используется FureBean .

Поэтому предложенное выше решение (соответствующий образец, описанному в разделе 2,5) является лишь обходным путем. Генерация фасоли обертки должна работать только для других исключений. И я не знаю, почему это не получается.

-121--1419988-

Да! Да! пожалуйста, начните с Джит.

Я разработчик с привычкой пробовать новые вещи/методы для уже стабильного приложения. До того, как я встретил Git, я продолжал копировать мой текущий стабильный проект в папку с отметкой даты папки, чтобы запомнить, где я был, и которая была стабильной версией, тогда я начал бы работать с кодом.

Но с Git у меня нет проблем пробовать новые трюки в моем коде, то, что я делаю, это просто ветвь от моего мастера (главное стабильное приложение) делать мои попытки, и если я проваливаю то, что я пытался просто отбросить ветвь и быстро переключиться обратно на мой Мастер, который все еще цела, безопасна и стабильна. И если я успешен (который большую часть времени не) я просто объединить ветвь к хозяину, то отбросить ветвь. Как мило.

Ветвление в Гите заставило меня упасть с ним головой над пятками. Попробуйте

-121--3030621-

Объединить эти два:

  1. Можно получить время последнего изменения файла с помощью File.lastModified () .
  2. Для вывода списка всех файлов в каталоге используйте File.listFiles () .

Обратите внимание, что в Java объект java.io.File используется как для каталогов, так и для файлов.

8
ответ дан 29 November 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: