有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中如何根据日期从文件夹中获取文件

我在一个文件夹中有多个具有命名约定的文件

Name_MoreName_DDMMYYYY_SomeNumber_HHMMSS.txt

如何获取具有最早日期和时间(即最早的DDMMYYYY和HHMMS)的文件

例如,在以下示例中:

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

共 (1) 个答案

  1. # 1 楼答案

    首先,将文件名读入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)处理它们,当你处理第二组时,你需要按月份名称顺序进行比较