我的文件名如下
我必须为这两种文件格式编写一个java脚本,以便从每个文件名中提取两个日期。
你能帮忙吗?
答案 0 :(得分:2)
您应该使用正则表达式从这些文件名中提取日期。
private static Date[] extractDatesFromFileName(File file) throws ParseException {
Date[] dates = new Date[2];
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyyMMdd");
String regex = ".*(\\d{8})_(\\d{8}).*";
Pattern pattern = Pattern.compile(regex);
Matcher m = pattern.matcher(file.getName());
if (m.find()) {
dates[0] = dateFormatter.parse(m.group(1));
dates[1] = dateFormatter.parse(m.group(2));
}
System.out.println(dates[0]);
System.out.println(dates[1]);
return dates;
}
小解释:
在正则表达式中.*(\\d{8})_(\\d{8}).*
:
.*
代表从零到无限次重复的任何歌曲 (\\d{8})
代表正好八位(如果它们在括号中,则被视为捕获群组,我们在此正则表达式中有2个捕获组,一个用于每个日期)_
代表_
签名:)如果文件名匹配提供的模式,则提取,解析和返回两个日期作为数组。你应该添加一些错误处理等。
答案 1 :(得分:0)
如果您的意思是Java脚本(而不是Javascript),则可以使用regexp,如下所示:
String in = "C:\\Users\\name\\Documents\\repository\\zzz\\xxx_yyy\\new\\aaa_bbb_ppp_ccc_ddd_eee_ZZ_E_20160801_20160831_v1-0.csv";
Pattern p = Pattern.compile("_(\\d{8})_v1-0");
Matcher m = p.matcher(in);
if (m.find()){
System.out.println(m.group(1));
}
答案 2 :(得分:0)
我认为您想要提取每个文件路径中存在的两个日期。 这可以按如下方式完成:
String filename1 = "C:\\Users\\name\\Documents\\repository\\zzz\\xxx_yyy\\new\\aaa_bbb_ccc_ddd_eee_ZZ_E_20160801_20160831_v1-0.csv";
Pattern p = Pattern.compile("[0-9]{8}+_[0-9]{8}+");
Matcher m = p.matcher(filename1);
String[] dateStrArr = m.find()?m.group(0).split("_"): null;
第一个日期将在0索引中,第二个日期将在1个索引位置。
第二个文件名也是如此。 希望这会有所帮助。
一旦提取,您可以使用SimpleDateFormat将它们转换为日期对象。