在Maven项目中放置静态文件的位置

Yi *_*Luo 3 java file maven

我创建了一个没有原型的简单Maven项目,一切都很好.然后我CVA.pmmlmain/resources目录下添加了一个文件.之后,我想读取文件但得到FileNotFoundException.我尝试了以下方法:

方法1:

InputStream is = BundleTest.class.getResourceAsStream("CVA.pmml");
Run Code Online (Sandbox Code Playgroud)

方法2:

InputStream is = BundleTest.class.getResourceAsStream("resources/CVA.pmml");
Run Code Online (Sandbox Code Playgroud)

方法3:

InputStream is = new FileInputStream("CVA.pmml");
Run Code Online (Sandbox Code Playgroud)

方法4:

InputStream is = new FileInputStream("resources/CVA.pmml");
Run Code Online (Sandbox Code Playgroud)

它们都不起作用.有什么建议吗?

以下是项目结构的屏幕截图:

项目结构

JB *_*zet 5

方法1:

InputStream is = BundleTest.class.getResourceAsStream("CVA.pmml");
Run Code Online (Sandbox Code Playgroud)

这将在与BundleTest类相同的包中查找CVA.pmml资源.但CVA.pmml位于根包中,而BundleTest则不是.

方法2:

InputStream is = BundleTest.class.getResourceAsStream("resources/CVA.pmml");
Run Code Online (Sandbox Code Playgroud)

这将在BundleTest类的包下的资源包中查找它.但它在根包中.

方法3:

InputStream is = new FileInputStream("CVA.pmml");
Run Code Online (Sandbox Code Playgroud)

那将在文件系统上,在您执行java命令的目录中查找它.但是它位于类路径中,嵌入在jar(或类路径目录)中

方法4:

InputStream is = new FileInputStream("resources/CVA.pmml");
Run Code Online (Sandbox Code Playgroud)

那将在文件系统的目录`resources中,在你执行java命令的目录下查看它.但是它位于类路径中,嵌入在jar(或类路径目录)中

正确的方法是

InputStream is = BundleTest.class.getResourceAsStream("/CVA.pmml");
Run Code Online (Sandbox Code Playgroud)

(注意领先的斜线)

要么

InputStream is = BundleTest.class.getClassLoader().getResourceAsStream("CVA.pmml");
Run Code Online (Sandbox Code Playgroud)