2014-12-01 2 views
0

Я хочу отправить предупреждение, если последний измененный файл в каталоге старше 24 часов. Я использовал подсказки от этих двух вопросов:Поиск последнего измененного файла старше 24 часов в Java

How do I find the last modified file in a directory in Java?

Changing Java Date one hour back

и придумали:

File dir = new File("/path/to/dir"); 

File[] files = dir.listFiles(); 
if (files.length == 0) { 
    return null; 
} 

File lastModifiedFile = files[0]; 
for (int i = 1; i < files.length; i++) { 
    if (lastModifiedFile.lastModified() < files[i].lastModified()) { 
     Date modifiedDate = new Date(files[i].lastModified()); 
     return modifiedDate; 
    } 
} 
Date currentDate = new Date(); 
Calendar cal = Calendar.getInstance(); 
cal.setTime(currentDate); 
cal.add(Calendar.HOUR, -24); 
Date alertDate = cal.getTime(); 

if (modifiedDate.before(alertDate)){ 
    return true; 
} else { 
    return false; 
} 

Однако я получаю «не может найти символ» ModifiedDate. Я понимаю, что его, потому что modifiedDate не может быть замечен последним оператором if, но если я поместил его и alertDate в начальный цикл цикла, я получу «отсутствующий оператор возврата».

Любые идеи?

ответ

0

Вы пытались, как показано ниже;

public static boolean getLastModified() throws IOException{ 
    File dir = new File("C:\\temp\\lot_of_files\\logs"); 

    File[] files = dir.listFiles(); 
    if (files.length == 0) { 
     throw new IOException("No files to monitor in the dir"); 
    } 

    Date modifiedDate = null; 
    File lastModifiedFile = files[0]; 
    for (int i = 1; i < files.length; i++) { 
     if (lastModifiedFile.lastModified() < files[i].lastModified()) { 
      modifiedDate = new Date(files[i].lastModified()); 
     } 
    } 
    Date currentDate = new Date(); 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(currentDate); 
    cal.add(Calendar.HOUR, -24); 
    Date alertDate = cal.getTime(); 

    if (modifiedDate != null && modifiedDate.before(alertDate)){ 
     return true; 
    } else { 
     return false; 
    } 
} 

Этот код является краткосрочным. Я лично рассмотрел бы разработку решения на основе Java WatchService

+0

Спасибо за подсказку, но я попробовал это так и получил «Missing return Statement» – sansSpoon

+0

Привет, Джером, спасибо, что сработало. Этот код на самом деле всего лишь маленький скриптлет, который находится внутри готового Java-планирования и программы просмотра папок, поэтому нет необходимости в службе просмотра. Спасибо за подсказку, хотя :) – sansSpoon

Смежные вопросы