使用正则表达式将文件结尾与目标文件夹中的扩展名war相匹配

时间:2015-05-28 15:55:59

标签: java regex

我正在尝试使用regex表达式从目标文件夹中获取文件。我正在部署war文件,并且为了运行它我需要确定保存在目标文件夹中的war文件,以便它可以安装它并运行我的tomcat实例。

我不能提到静态路径,因为我的战争版本会在发布之后发生变化。我不想每次都手动更新它。

我使用了以下正则表达式,但这似乎不起作用。

Matcher matcher = Pattern.compile("(.+?)(\\.war)$").matcher("./target/");
webapp = new File(matcher.group(1));

我希望获取目标文件夹中存在的war文件。

我还可以将两个不同的匹配器("./target/" or ./nameOfComponent/target/")附加到单个模式吗?

2 个答案:

答案 0 :(得分:2)

迭代文件,检查每个文件的模式。

// only needed once for all files
Pattern pattern = Pattern.compile("(.+?)(\\.war)$");

// collect all files in all relevant directories
List<File> potentialFiles = new ArrayList<>();
potentialFiles.addAll(Arrays.asList(new File("./target/").listFiles()));
potentialFiles.addAll(Arrays.asList(new File("./nameOfComponent/target/").listFiles()));

File webapp = null;
for (File file : potentialFiles) {
    Matcher matcher = pattern.matcher(file.getName());
    if (matcher.matches()) {
        webapp = file;
        break; // use this line if you only want the first match
    }
}

// use "webapp", but expect null if there was no match

答案 1 :(得分:1)

您可以这样做:

    File dir = new File("directory/path");
    File[] all = dir.listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            return pathname.getName().endsWith(".war");
        }
    });

这将获得File[]包含所有&#34; .war&#34; &#34;目录/路径&#34;中的文件文件夹中。