【问题标题】:Extract date from file path in java从java中的文件路径中提取日期
【发布时间】:2015-09-14 18:03:32
【问题描述】:

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

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。

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

【问题讨论】:

  • 有自己的 foider 1995 吗?子文件夹为 09 还是文件夹名称为“1995/09/01”?
  • 可以说根文件夹是 c:\root 或 /home/root。里面会有子文件夹 1995/09/01, ... (或 1995/09, ...)

标签: java regex date filepath


【解决方案1】:

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

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

这是&lt;Year, Map&lt;Month&gt;, List&lt;Days&gt;的地图

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

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

【讨论】:

  • 是的,就是这样。也感谢您的递归想法。
【解决方案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&lt;String, Map&lt;String,String&gt;&gt;

【讨论】:

    【解决方案3】:

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

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

    DEMO

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

    【讨论】:

    • 每个路径只包含一个日期组件。所以“/”是路径分隔符。所以一个文件夹 2010 和子文件夹 09 和子文件夹 15
    猜你喜欢
    • 1970-01-01
    • 2021-09-11
    • 2015-04-26
    • 2010-10-01
    • 2016-06-19
    • 1970-01-01
    • 2013-06-08
    相关资源
    最近更新 更多