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

时间:2015-09-14 18:03:33

标签: java regex date filepath

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

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

和另一个根文件夹,其中包含所有表单

的子文件夹
somepath/yyyy/mm/dd (also somepath\yyyy\mm\dd)

其中yyyy是1955年的一年,mm是像09年的一个月,dd是像01这样的一天。

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

是否有正则表达式考虑到特​​定的文件分隔符? 或者这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:2)

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

的地图
HashMap <Integer, Map<Integer, List<Integer>>

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

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

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

答案 1 :(得分:2)

您应该使用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>>

答案 2 :(得分:1)

要从String中的路径获取值,可以使用regex:

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

DEMO

将在名称为年,月,日的组中以yyyy / mm / dd或yyyy / mm(\或/作为分隔符)的形式捕获值。然后你用匹配类的方法组(组)来获取它们。或者你可以采用整个字符串(例如&#34; 2004/09 / 01&#34;)并以另一种方式处理它。

相关问题