从 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}))?$
将以 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>>
.
中
我有一个根文件夹,其中包含所有形式的子文件夹
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}))?$
将以 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>>
.