我正在尝试使用regex表达式从目标文件夹中获取文件。我正在部署war文件,并且为了运行它我需要确定保存在目标文件夹中的war文件,以便它可以安装它并运行我的tomcat实例。
我不能提到静态路径,因为我的战争版本会在发布之后发生变化。我不想每次都手动更新它。
我使用了以下正则表达式,但这似乎不起作用。
Matcher matcher = Pattern.compile("(.+?)(\\.war)$").matcher("./target/");
webapp = new File(matcher.group(1));
我希望获取目标文件夹中存在的war文件。
我还可以将两个不同的匹配器("./target/" or ./nameOfComponent/target/")
附加到单个模式吗?
答案 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;中的文件文件夹中。