如何从java中的给定文件名中提取日期

时间:2016-11-30 10:36:16

标签: java

我的文件名如下

  1. C:\ Users \用户名\文件\库\ ZZZ \ xxx_yyy \新\ aaa_bbb_ccc_ddd_eee_ZZ_E_20160801_20160831_v1-0.csv
  2. C:\ Users \用户名\文件\库\ ZZZ \ xxx_yyy \新\ aaa_bbb_ppp_ccc_ddd_eee_ZZ_E_20160801_20160831_v1-0.csv
  3. 我必须为这两种文件格式编写一个java脚本,以便从每个文件名中提取两个日期。

    你能帮忙吗?

3 个答案:

答案 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将它们转换为日期对象。