Как получить самый старый файл в каталоге, используя Java - PullRequest
0 голосов
/ 26 марта 2019

Существуют ли способы получения самого старого файла в каталоге с использованием Java? У меня есть каталог, в который я записываю файлы журналов, и я хотел бы удалить файлы журналов после того, как я записал более 500 файлов журналов (но хочу удалить только самые старые).

Единственный способ зачать себя, это:

  • Получить список файлов, используя метод File.listFiles ()
  • Цикл каждого файла
  • Сохраните дату последнего изменения с помощью File.lastModified () и сравните с File из итерации цикла, сохраните самую старую lastModified ()

Неудобный аспект этой логики заключается в том, что мне придется зацикливать каталог журналов каждый раз, когда я хочу получить самые старые файлы, и это не кажется наиболее эффективным.

Я ожидал, что в библиотеке java.io.File будет метод для получения самого старого файла в каталоге, но он, кажется, не существует, или я не нашел его. Если есть способ получения самого старого файла в каталоге или более удобный подход при программировании решения, я бы хотел знать.

Спасибо

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Исходя из комментариев @Yoda, я решил ответить на свой вопрос.

public static void main(String[] args) throws IOException {
    File directory = new File("/logFiles");
    purgeLogFiles(directory);
}

public void purgeLogFiles(File logDir){
    File[] logFiles = logDir.listFiles();
    long oldestDate = Long.MAX_VALUE;
    File oldestFile = null;
    if( logFiles != null && logFiles.length >499){
        //delete oldest files after theres more than 500 log files
        for(File f: logFiles){
            if(f.lastModified() < oldestDate){
                oldestDate = f.lastModified();
                oldestFile = f;
            }               
        }

        if(oldestFile != null){
            oldestFile.delete();
        }
    }
}
0 голосов
/ 26 марта 2019

К сожалению, вам придется просто пройтись по файловой системе.Что-то вроде:

public static void main(String[] args) throws IOException {
    String parentFolder = "/var/log";
    int numberOfOldestFilesToFind = 5;

    List<Path> oldestFiles = findOldestFiles(parentFolder, numberOfOldestFilesToFind);

    System.out.println(oldestFiles);
}

private static List<Path> findOldestFiles(String parentFolder, int numberOfOldestFilesToFind) throws IOException {
    Comparator<? super Path> lastModifiedComparator = 
            (p1, p2) -> Long.compare(p1.toFile().lastModified(),
                                     p2.toFile().lastModified());

    List<Path> oldestFiles = Collections.emptyList();

    try (Stream<Path> paths = Files.walk(Paths.get(parentFolder))) {
        oldestFiles = paths.filter(Files::isRegularFile)
                           .sorted(lastModifiedComparator)
                           .limit(numberOfOldestFilesToFind)
                           .collect(Collectors.toList());
    }

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