首先,閱讀文件的名稱爲List<String>
。
然後使用該理解的文件名格式的比較列表進行排序:
public class FileNameComparator implements Comparator<String> {
private static Pattern pattern = Pattern.compile("^.*?_([0-9]{2})([0-9]{2})([0-9]{4})_.*?_([0-9]{2})([0-9]{2})([0-9]{2})\\.txt$");
private static int[] groupOrder = new int[]{3, 2, 1, 4, 5, 6};
@Override
public int compare(String filename1, String filename2) {
Matcher matcher1 = pattern.matcher(filename1);
Matcher matcher2 = pattern.matcher(filename2);
return compareMatchers(matcher1, matcher2);
}
private int compareMatchers(Matcher matcher1, Matcher matcher2) {
if (matcher1.matches()) {
if (matcher2.matches()) {
// for each group in the correct order (year, month, date, hour, minute, second)
for (int group : groupOrder) {
int result = compareValues(matcher1.group(group), matcher2.group(group));
if (result != 0) {
return result;
}
}
return 0;
} else {
// filename 2 is incorrect pattern
return -1;
}
} else {
// filename 1 is incorrect pattern
return 1;
}
}
private int compareValues(String value1, String value2) {
return new Integer(value1).compareTo(new Integer(value2));
}
}
排序:
List<String> filenames = ...; /* populate the list of filenames */
Collections.sort(filenames, new FileNameComparator());
爲了獲得最古老,佔據第一位。爲了獲得最年輕的,拿走最後一個。
編輯:如果你更新後的文件名模式是:
if-logFile_2016_Jun_02_115011.txt
...那麼正則表達式和代碼將需要改變,以能夠提取的參數和執行正確的比較。正則表達式是:
^.*?_([0-9]{4})_(.{3})_([0-9]{2})_([0-9]{2})([0-9]{2})([0-9]{2})\\.txt$
...你會處理他們爲了(1,2,3,4,5,6),當你處理小組第二,你需要在一個月名比較訂購。
獲取文件名,對它們進行排序並根據排序挑選頂部/底部 – Sanjeev
我想獲取文件夾中最後添加的文件以及我的文件名if-logFile_2016_Jun_02_115011 .... –
我編輯了我的答案來協助文件名稱模式的更改。隨時upvote,如果它可以幫助你。 – Jason