Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式匹配目标文件夹中以扩展名war结尾的文件_Java_Regex - Fatal编程技术网

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

Java 使用正则表达式匹配目标文件夹中以扩展名war结尾的文件,java,regex,Java,Regex,我正在尝试使用正则表达式从目标文件夹获取文件。我正在部署war文件,为了运行我的功能测试,需要确定保存在目标文件夹中的war文件,以便它可以安装它并针对它运行我的tomcat实例 我不能提及静态路径,因为我的战争版本在发布后会发生变化。我不想每次都手动更新它 我使用了下面的正则表达式,但这似乎不起作用 Matcher matcher = Pattern.compile("(.+?)(\\.war)$").matcher("./target/"); webapp = new File(matche

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

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

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

Matcher matcher = Pattern.compile("(.+?)(\\.war)$").matcher("./target/");
webapp = new File(matcher.group(1));
我希望获取目标文件夹中存在的war文件


我还可以用一个模式附加两个不同的匹配器
(“/target/”或./nameOfComponent/target/”

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

// 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
//所有文件只需要一次
Pattern=Pattern.compile(“(.+?)(\\.war)$”;
//收集所有相关目录中的所有文件
List potentialFiles=new ArrayList();
potentialFiles.addAll(Arrays.asList(新文件(“./target/”).listFiles());
potentialFiles.addAll(Arrays.asList(新文件(“./nameOfComponent/target/”).listFiles());
文件webapp=null;
用于(文件:潜在文件){
Matcher Matcher=pattern.Matcher(file.getName());
if(matcher.matches()){
webapp=文件;
break;//如果只需要第一个匹配项,请使用此行
}
}
//使用“webapp”,但如果不匹配,则应为null

您可以执行以下操作:

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

这将得到一个
文件[]
,其中包含“目录/路径”文件夹中的所有.war”文件。

您是在询问如何重用
模式.compile((.+?)(\\\.war)$”
?如果是这样,请提取一个变量。我是在询问如何将使用“(.+?)(\\\.war)$”编译的模式对象重新用于不同的路径。“/modulename/target/”,如果文件不存在于上一个路径“/parent target/”中。所以有点像在同一个模式对象上附加两条路径(比如谓词或番石榴),甚至不确定这是否可能。我对java中的文件和模式匹配没有太多的了解。谢谢这个解决方案。真是一个错误,我在matcher.FYI中使用了静态字符串,我找到了插件“maven dependency plugin”,它将重命名war文件并将其移动到功能测试的目标文件夹中。在这种情况下,我不必担心在我的功能测试中更新版本,或者在发布war文件后使用正则表达式来确定正在部署的war文件,因为每次它都会将其重命名为插件“name of the module.war”中提到的特定名称。非常感谢您提供的解决方案。我试试看。