簡體   English   中英

從 src/main/resources 讀取會在命令行上給出 java.nio.file.InvalidPathException (但在 Eclipse 中工作正常)

[英]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 中需要做一些事情,但我不確定它是什么

您不能將PathFiles與資源一起使用。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM