我用这个代码来得到一个 Path
对于测试代码中的测试资源文件:
Path target = Path.of(
Thread.currentThread().getContextClassLoader()
.getResource("target1").getFile()
);
文件位于 src/test/resources/target1
在构建时复制到 target/test-classes/tartget1
.
它在类似unix的系统上运行良好,但在windows上却抛出了一个例外:
java.nio.file.invalidpathexception:索引2处的非法字符<:>:/d:/a/项目名称/repo名称/target/测试类/target1
使用stacktrace(来自ci计算机):
在java.base/sun.nio.fs.windowspathparser.normalize(windowspathparser。java:182)
在java.base/sun.nio.fs.windowspathparser.parse(windowspathparser。java:153)
在java.base/sun.nio.fs.windowspathparser.parse(windowspathparser。java:77)
在java.base/sun.nio.fs.windowspath.parse(windowspath。java:92)
在java.base/sun.nio.fs.windowsfilesystem.getpath(windowsfilesystem。java:229)
在java.base/java.nio.file.path.of(path。java:147)
什么是获得成功的正确方法 Path
以平台不可知论的方式?我想对unix和windows机器使用相同的代码(对我来说调试这个问题很困难,因为我没有windows机器专用ci和windows。)
1条答案
按热度按时间ipakzgxi1#
以下在我的windows计算机上运行,而您的示例也如预期的那样失败:
我假设这是因为解析uri的实现与解析字符串的实现不同。