gpt4 book ai didi

java - 无法使用 Paths.get() 从 Maven 资源加载文件

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:38:40 28 4
gpt4 key购买 nike

对于这个看似简单而且几乎是愚蠢的问题,我深表歉意,但我花了很多时间来解决它,但没有取得太大的成功。

我创建了一个非常简单的 Maven 项目,然后在 src/resources 文件夹中创建了一个简单的文本文件,如下所示。

enter image description here

enter image description here

pom.xml 很简单。 App 类如下所示:

public class App {
public static void main(String[] args) throws IOException {
Files.lines(Paths.get("test.txt")).forEach(System.out::println);
}
}

我得到的异常:

Exception in thread "main" java.nio.file.NoSuchFileException: test.txt
at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:79)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
at sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:230)
at java.nio.file.Files.newByteChannel(Files.java:361)
at java.nio.file.Files.newByteChannel(Files.java:407)
at java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384)
at java.nio.file.Files.newInputStream(Files.java:152)
at java.nio.file.Files.newBufferedReader(Files.java:2784)
at java.nio.file.Files.lines(Files.java:3744)
at java.nio.file.Files.lines(Files.java:3785)
at com.rahul.App.main(App.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

Process finished with exit code 1

这似乎是一个非常愚蠢的问题,但我就是无法理解它。真诚感谢任何帮助。

最佳答案

您正在使用 Maven,并且您要加载的文本文件已正确放置在类路径中:src/main/resources。问题是 Paths.get("test.txt") 不在类路径中而是在文件系统中搜索文件。

所以您需要的是从类路径中获取资源作为 URI 并将其传递给 Paths.get(URI):

Path textFile = Paths.get(App.class.getResource("/test.txt").toURI());
Files.lines(textFile).forEach(System.out::println);

请注意,获取Path的方法非常复杂。
遗憾的是,Class 类未更新以利用 Java 7 中引入的 java nio API。
如果我们可以这样写,那就更简单了:

Files.lines(App.class.getResourcePath("/test.txt"))
.forEach(System.out::println);

关于java - 无法使用 Paths.get() 从 Maven 资源加载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49222296/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com