2016-08-24 26 views
-4

我有一個文件夾中的多個文件的命名約定如何從基於日期在java中

Name_MoreName_DDMMYYYY_SomeNumber_HHMMSS.txt 

我怎樣才能得到它具有最早的日期和時間的文件(即最老的DDMMYYYY該文件夾中的文件和HHMMSS)。

對於下面的例子:

Name_MoreName_22012012_SomeNumber_072334.txt 
Name_MoreName_22012012_SomeNumber_072134.txt 
Name_MoreName_24012012_SomeNumber_072339.txt 
Name_MoreName_22012012_SomeNumber_072135.txt 

...最早的文件將是

Name_MoreName_22012012_SomeNumber_072134.txt 
+0

獲取文件名,對它們進行排序並根據排序挑選頂部/底部 – Sanjeev

+0

我想獲取文件夾中最後添加的文件以及我的文件名if-logFile_2016_Jun_02_115011 .... –

+0

我編輯了我的答案來協助文件名稱模式的更改。隨時upvote,如果它可以幫助你。 – Jason

回答

0

首先,閱讀文件的名稱爲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),當你處理小組第二,你需要在一個月名比較訂購。

+0

修改爲覆蓋文件名模式的更改。 – Jason

+0

好的...謝謝你jason –

+0

文件f1 =新文件(下載文件夾)+ System.getProperty(「file.separator」)+ nsFile.getName()); f1.delete();請告訴我什麼是錯的是 –