[英]Reading from src/main/resources gives java.nio.file.InvalidPathException on command line (but works fine in Eclipse)
我讀取文件 src\main\resources\input.txt 如下
String abslutefn = getClass().getClassLoader().getResource("input.txt").getFile().trim();
Path path = new File(abslutefn).toPath();
String lines = Files.readString(path);
上面的作品從 Eclipse 開始。 但是當我從命令行構建和運行時它失敗了
mvn clean install
java -cp target\boolean.jar com.xx.yy.zz.App
Exception in thread "main" java.nio.file.InvalidPathException: Illegal char <:> at index 4: file:xyz
at java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:229)
at java.base/java.io.File.toPath(File.java:2290)
我查看了 jar 文件
jar -tf target\boolean.jar
我在根目錄下看到 input.txt 文件(並且沒有 src\main\resources)
當我從命令行jar -tf target\stealthboolean.jar
運行時,我該怎么做才能確保正確加載文件。 我想在 pom.xml 中需要做一些事情,但我不確定它是什么
您不能將Path
和Files
與資源一起使用。
URL 的 getFile() 方法沒有返回有效的文件名。 它之所以稱為 getFile() 是因為 java.net.URL 是 25 年前編寫的,當時 URL 通常指的是其他機器上的物理文件。
但是,您可以將資源作為 stream 打開,然后自己轉換字節:
String lines;
try (InputStream stream =
getClass().getClassLoader().getResourceAsStream("input.txt")) {
lines = new String(stream.readAllBytes(), StandardCharsets.UTF_8);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.