从 java 中的文件路径中提取日期

Extract date from file path in java

我有一个根文件夹,其中包含所有形式的子文件夹

somepath/yyyy/mm (also somepath\yyyy\mm)

和另一个包含所有形式的子文件夹的根文件夹

somepath/yyyy/mm/dd (also somepath\yyyy\mm\dd)

其中 yyyy 是一年,如 1955,mm 是一个月,如 09,dd 是一天,如 01。

我想为每个子文件夹提取 yyyy、mm 和 dd 使用 java。

是否有考虑特定文件分隔符的正则表达式? 或者最好的方法是什么?

要从字符串中的路径获取值,您可以使用正则表达式:

(?<year>\d{4})[\/](?<month>\d{2})(?:[\/](?<day>\d{2}))?$

DEMO

将以 yyyy/mm/dd 或 yyyy/mm(\ 或 / 作为分隔符)的形式在名称为:年、月、日的组中捕获值。然后你可以用 Matcher class 的方法 group(group) 得到它们。或者您可以采用整个数学字符串(如“2004/09/01”)并以另一种方式处理它。

您必须存储您当前所在的级别: 级别可以是年、月或日(您可以使用任何枚举或整数) - 从年级开始。 - 将所有文件名读入

的映射中
HashMap <Integer, Map<Integer, List<Integer>>

这是<Year, Map<Month>, List<Days>

的地图
  • 读取年份文件夹的所有文件名,并存储 到地图
  • 更改为月份级别:从地图中读取子文件夹中的所有值, 并读取并存储所有月份值。

你可以递归地解决这个问题。

你应该使用 FilenameFilter:

String path = "C:/tmp";
File dir = new File(path);

        FilenameFilter yearFilter = new FilenameFilter() {
            public boolean accept(File file, String fileName) {
                if(file.isDirectory()) {
                    if(fileName.matches("^\d{4}$")) {
                        return true;
                    }
                }
                return false;
            }
            };

        String[] names = dir.list(yearFilter);

为月份和日期创建类似的过滤器。然后对每个进行迭代,例如:path+"/"+names[i]。所有数据都可以保存在 Map<String, Map<String,String>>.