У меня просто возник вопрос о написании функции, которая будет искать в каталоге самый последний журнал в каталоге. В настоящее время я придумал один, но мне интересно, есть ли лучший (возможно, более правильный) способ сделать это.Groovy прочитал последний файл в каталоге
В настоящее время я использую hdsentinel для создания журналов на компьютере и размещения журнала в каталоге. Журналы сохраняются так:
/directory/hdsentinel-computername-date
ie. C:/hdsentinel-owner-2010-11-11.txt
Так что я написал небольшой скрипт, который петли через определенные переменные для проверки самых последних (в течение прошлой недели), но после того, глядя на него, я вопрос, насколько эффективно и Правильно это делать так.
Вот сценарий:
String directoryPath = "D:"
def computerName = InetAddress.getLocalHost().hostName
def dateToday = new Date()
def dateToString = String.format('%tm-%<td-%<tY', dateToday)
def fileExtension = ".txt"
def theFile
for(int i = 0; i < 7; i++) {
dateToString = String.format('%tY-%<tm-%<td', dateToday.minus(i))
fileName = "$directoryPath\\hdsentinel-$computerName-$dateToString$fileExtension"
theFile = new File(fileName)
if(theFile.exists()) {
println fileName
break;
} else {
println "Couldn't find the file: " + fileName
}
}
theFile.eachLine { print it }
Скрипт прекрасно работает, возможно, она имеет некоторые недостатки. Я чувствовал, что должен пойти дальше и спросить, какой типичный маршрут для этого типа вещей, прежде чем я продолжу его.
Все данные оцениваются.
+1, Это «groovy» (то есть, не читается), и он даже соответствует оригинальному «присваиванию по примеру» (который был изменен на более позднем этапе). o) - Добро пожаловать в Stackoverflow, BTW! - SCNR – robbbert
Очень приятно, мне пришлось несколько раз пересмотреть это, пытаясь понять, как это работает. У меня есть небольшие проблемы, просто получившие последнее изменение для имени владельца. Где вы его распечатываете, я вместо этого проверяю, есть ли (it.toString(). Contains (имя_компьютера)), однако это все еще представляет мне все файлы под этим именем компьютера. Есть ли способ получить самое последнее? У меня возникли проблемы с возможностью сравнить их по какой-то причине. – StartingGroovy
У вас есть несколько вариантов для достижения этой цели. Предоставляемый мной код группируется владельцем и создает отсортированный список журналов для каждого. Таким образом, удаление «.flatten()» приведет к списку отсортированных списков. При этом вы можете просто использовать .first() или .last(), чтобы получить максимальную/последнюю информацию. Другая возможность заключается в том, чтобы заменить этот вид в целом, и вместо этого использовать «мин» или «макс». Например: «logs.min {log -> log.lastModified()}». Если вам нужен только один результат на одного владельца, вам действительно не нужно беспокоиться о организации по дате. – Northover