Java getClass().getResource(";/";)在命令行中返回null

Java getClass().getResource(";/";)在命令行中返回null,java,maven,jar,classpath,classloader,Java,Maven,Jar,Classpath,Classloader,我正在尝试读取maven项目中位于/src/main/resources/file.txt的文件 我正在使用 URL url=this.getClass().getResource("/"); String filePath=url.getPath()+"file.txt"; url对象在通过eclipse运行时获取正确的值 但是,当我打包jar并在命令行中运行它时: jar -cp myjar.jar SampleTest 它为“url”对象返回null,并在下一行抛出NullPointe

我正在尝试读取maven项目中位于/src/main/resources/file.txt的文件

我正在使用

URL url=this.getClass().getResource("/");
String filePath=url.getPath()+"file.txt";
url对象在通过eclipse运行时获取正确的值

但是,当我打包jar并在命令行中运行它时:

jar -cp myjar.jar SampleTest
它为“url”对象返回null,并在下一行抛出NullPointerException

我已经使用文件浏览器打开了我的Jar文件并进行了检查。它在Jar中的“/”位置有“file.txt”

我哪里出错了?

jar文件中(通常)没有目录。因此,它将返回
null


如果要获取该文件,可以直接获取该资源:

URL fileUrl = getClass().getResource("/file.txt");
...
或者简单地说:

InputStream fileInputStream = getClass().getResourceAsStream("/file.txt");

您应该将该文件移动到类路径中,并按如下方式获取它:

InputStream is = this.getClass().getResourceAsStream("file.txt");

您应该尝试
URL=getClass().getResource(“/file.txt”)
String filePath=url.getPath()假设它在类路径中。您的JAR是否有包含类路径条目的清单?如果没有,那么添加一个。好吧,它在eclipse中运行良好。“/”在eclipse中运行时指向/target/classes目录。正如我在回答中所写的:jar文件中没有目录-例如,您无法获取不存在的资源(目录)。从eclipse运行程序时,类路径指向文件路径/目录。在这种环境中,您可以使用
Class.getResource
获取目录信息。通过某种方式调整项目pom.xml,是否可以使用getResource(“/dir”)获取jar中的目录URL?这是可能的,但是一种黑客行为,有关更多信息,请参阅。