我有一个根文件夹,其中包含所有形式的子文件夹
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。
是否有正则表达式考虑到特定的文件分隔符? 或者这样做的最佳方式是什么?
答案 0 :(得分:2)
您必须存储当前的级别: 级别可以是年,月或日(您可以使用任何枚举或int) - 从年级开始。 - 将所有文件名读入
的地图HashMap <Integer, Map<Integer, List<Integer>>
这是<Year, Map<Month>, List<Days>
你可以递归地解决这个问题。
答案 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}))?$
将在名称为年,月,日的组中以yyyy / mm / dd或yyyy / mm(\或/作为分隔符)的形式捕获值。然后你用匹配类的方法组(组)来获取它们。或者你可以采用整个字符串(例如&#34; 2004/09 / 01&#34;)并以另一种方式处理它。