在java中获取基于文件名模式的最新文件

时间:2016-06-13 14:19:41

标签: java

将文件名模式设为YYYYMDD或YYYYMMDD,如下所示。

在目录中包含具有以下模式的文件列表。 必须根据java中的文件名读取最新文件。 怎么做?

xxx_2016103
....
xxx_20161104

3 个答案:

答案 0 :(得分:1)

最佳解决方案是获取日期,将它们映射到文件,并让TreeMap个对象实现SortedMap这样的事实,以便他们为您完成工作。

Map<Date,File> filedatemap = new TreeMap<Date,File>();
for(File f : inputdir.listFiles()) { //Assumption: inputdir is a File object pointing to the target directory.
    String filename = f.getName();
    DateFormat df = new SimpleDateFormat("YYYYMMdd");
    Date filedate = df.parse(filename, new ParsePosition(filename.getLastIndexOf('_'));
    filedatemap.put(filedate,f);
}

File latestfile = filedatemap.lastEntry().getValue(); //Last entry because natural order of Date is chronological.
//Go do things with that file

为了获得最佳效果,请将Zircon的评论记录为心脏并用0填充您的单个数字Months / Days,以便SimpleDateFormat能够正确解析。

答案 1 :(得分:0)

  1. 创建一个包含FileDateWrapper
  2. 的小班String filename; DateTime date;
  3. 收集List<FileDateWrapper>中的所有文件名(暂时保留日期为null)
  4. 使用某些日期/时间API(如Jodajava.time(Java 8 +)创建两种日期格式(如您所述)
  5. 浏览列表,删除_字符(.split()),然后尝试解析两种格式的结果字符串(例如,使用parseDateTime(String)。存储日期在FileDateWrapper
  6. 的字段中成功解析
  7. 实施ComparatorComparable并对您的FileDateWrapper(或Collections.max
  8. 列表进行排序

答案 2 :(得分:0)

如果列表中有文件名,则可以创建自定义比较器,根据文件名中的日期对列表进行排序。

public class FilenamesWithDateSuffixComparator implements Comparator<String> {

    private static final int ONE_DIGIT_MONTH_FORMAT = "yyyyMdd".length();

        @Override
        public int compare(String o1, String o2) {
        String date1 = o1.substring(o1.lastIndexOf("_") + 1);
        String date2 = o2.substring(o2.lastIndexOf("_") + 1);
        // If the dates only have one digit for the month, insert a zero.
        if (date1.length() == ONE_DIGIT_MONTH_FORMAT) {
            date1 = date1.substring(0, 4) + "0" + date1.substring(5);
        }
        if (date2.length() == ONE_DIGIT_MONTH_FORMAT) {
            date2 = date2.substring(0, 4) + "0" + date2.substring(5);
        }       
        return date1.compareTo(date2);
    }
}

然后,您可以使用比较器对列表进行排序:

Collections.sort(fileNamesList, new FilenamesWithDateSuffixComparator());

或者使用Java 8中的list short方法:

fileNamesList.sort(new FilenamesWithDateSuffixComparator());