- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试为我的 SimpleFileVisitor 实现 JUnit 测试,但使用的 PathMatcher 在 Windows 上无法正常工作。问题似乎是具有正则表达式模式的 PathMatcher 在 Linux 和 Windows 上表现不同:
import java.nio.file.FileSystems;
import java.nio.file.PathMatcher;
import java.nio.file.Paths;
public class TestApp{
public static void main(String []args){
final PathMatcher glob = FileSystems.getDefault().getPathMatcher("glob:{/,/test}");
final PathMatcher regex = FileSystems.getDefault().getPathMatcher("regex:/|/test");
System.err.println(glob.matches(Paths.get("/"))); // --> Linux=true Windows=true
System.err.println(glob.matches(Paths.get("/test"))); // --> Linux=true Windows=true
System.err.println(glob.matches(Paths.get("/test2"))); // --> Linux=false Windows=false
System.err.println(regex.matches(Paths.get("/"))); // --> Linux=true Windows=false
System.err.println(regex.matches(Paths.get("/test"))); // --> Linux=true Windows=false
System.err.println(regex.matches(Paths.get("/test2"))); // --> Linux=false Windows=false
}
}
但是我的正则表达式中有一个更长的列表,用于多个文件,这些文件不容易迁移到 glob 语法。否则,如果我将每个模式都写为未分组模式,我会嵌套不允许的组或更长的列表。
以跨平台方式执行此操作的最佳方法是什么?
最佳答案
首先我想说这是 PathMatcher 的 glob 处理语法中未记录的行为。它似乎将反斜杠(在 Windows 文件系统上很常见)转换为正斜杠(反之亦然)。从而使其始终在 Linux 和 Windows 之间工作。
下一行演示了不同的输出:
System.out.println(Paths.get("/test")); // Will output '\test' on Windows, '/test' on Linux
为了解决最初的问题,我们需要使用一些 RegexFu。
FileSystems.getDefault().getPathMatcher("regex:/|/test");
需要成为
FileSystems.getDefault().getPathMatcher("regex:(/|\\\\)|((/|\\\\)test)");
/
和 \
(你需要 \\
来转义 \
,但因为 Java,它需要像 \\\\
一样输入)。/
或 \
之间进行检查,第二部分是问题中输入的文本。 感谢@user3775041 提供了更清晰的正则表达式:
FileSystems.getDefault().getPathMatcher("regex:[/\\\\]|[/\\\\]test");
这已经在 Windows 10 和 Ubuntu 20.04 上进行了测试,两者都具有以下输出:
true
true
false
true
true
false
编辑:一个用 Java 测试正则表达式模式的好网站是 https://www.regexplanet.com/advanced/java/index.html
关于Java PathMatcher 在 Windows 上无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64102053/
我有一个测试服务器,它在运行时接受期望值,并在调用期望值时做出相应的响应。期望存储在 state 中。这是路线: val route: Route = ctx => { val routes =
错误:路由 '{path:"teams/", redirectTo:"all"}' 的配置无效:请提供 'pathMatch'。 'pathMatch' 的默认值是 'prefix',但通常意图是使用
我正在用 Java 编写一个应用程序,该应用程序显示文件列表,其中文件名中的第一个单词与用户定义的字符串匹配,然后根据某些首选项删除或重新排列它们。我目前正处于寻找找到我的文件的好方法的阶段。使用th
目录 概述 PathMatcher接口源代码 AntPathMatcher使用例子 spring的路径匹配工具 AntPat
我研究全局模式。 我写了一个简单的例子: PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:D:\\folder1
我的目标是创建一个具有 glob 功能的 FileScanner 并添加一些自定义过滤器功能(例如最小或最大文件大小)。 我的第一次尝试是: final PathMatcher pathMat
我尝试为我的 SimpleFileVisitor 实现 JUnit 测试,但使用的 PathMatcher 在 Windows 上无法正常工作。问题似乎是具有正则表达式模式的 PathMatcher
无论出于何种原因,我似乎无法获得匹配任何文件的 glob 语法路径匹配器。 我已将我的代码简化为以下方法: public static void match() throws IOException
我在删除路径匹配器从不匹配的孤立对象时遇到问题。如果路径中包含 2 个 id,我应该使用什么作为路径。谢谢。 即/api/getEntity/1234/123,其中 1234 是父 ID,123 是实
让我们: Path path = Paths.get("C:\\1.txt"); 以下代码打印“true”: PathMatcher matcher = FileSystems.getDefault(
虽然我已经看到了很多类似问题的答案,但我无法使以下代码按我认为应该的方式工作: File dataDir = new File("C:\\User\\user_id"); PathMatcher pa
实际的实现是特定于文件系统的,并且 PathMatcher 的实例可能有状态,所以不太可能。 有人确切知道吗? 最佳答案 一个PathMatcher看起来是一个纯粹的函数式接口(interface)。
在这里它使用完整的路径匹配,当我删除这个路径匹配时,它甚至不会加载应用程序或运行项目 import { NgModule } from '@angular/core'; import { Browse
当我在Ingress文件中添加50个以上的路径时-从Google Cloud Platform获取以下错误。 “同步期间出错:UpdateURLMap:googleapi:错误413:字段'resou
我有一条路由需要对多个用户进行身份验证。对spring cloud gateway服务进行集成测试,以测试所有路由安全性是否按预期工作。如何向单个路径匹配器/路由添加超过 1 个用户角色? 使用 Sp
我有以下路由器对象 const appRoutes: Routes = [ { path: '', redirectTo: '/', pathMatch:'full'}, { path: ''
我是一名优秀的程序员,十分优秀!