Java 当项目部署在服务器上时,以及当其类从测试类运行时,如何使文件可见?

Java 当项目部署在服务器上时,以及当其类从测试类运行时,如何使文件可见?,java,maven,path,jboss,Java,Maven,Path,Jboss,如果我使用直接调用它的文件: FileInputStream fileInputStream = new FileInputStream("SR02_pattern.xls"); 该文件位于\apv\main app目录中,不会部署该文件,当然,在服务器上运行项目时也不会看到该文件 如果我把文件放在/apv/mainweb/web-INF/classes/目录中,它将被部署,我可以通过 InputStream inStream = Thread.currentThread().getConte

如果我使用直接调用它的文件:

FileInputStream fileInputStream = new FileInputStream("SR02_pattern.xls");
该文件位于\apv\main app目录中,不会部署该文件,当然,在服务器上运行项目时也不会看到该文件

如果我把文件放在/apv/mainweb/web-INF/classes/目录中,它将被部署,我可以通过

InputStream inStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("SR02_pattern.xls")
当项目部署在服务器上时,但如果类是从测试运行的,则该行不会读取文件

可能,getResourceAsStreamSR02_pattern.xls查找文件的位置是由一些系统属性设置的,我可以使用它们,但我不知道哪些属性有帮助

在这两种情况下,如何通过相同的代码读取文件,而不将其作为参数传递到类中

这两种情况都有很多答案,但我找不到一个对这两种情况都适用的答案。两种情况下的默认路径不同

当然,我可以将文件放在两个位置,如果文件不在第一个文件夹中,请在第二个文件夹中查看,就像我现在所做的那样,但是维护两个副本容易出错,我希望使用更好的样式。

您应该对测试中的所有部分以及生产代码中的所有部分使用此.getClass.getResourceAsStream'/SR02 pattern.xl'。/定义资源的根目录


要读取的文件应位于src/main/resources中。这将在WEB-INF/classes位置生成最终的war包。

您应该为测试中的所有部件以及生产代码使用此.getClass.getResourcesStream'/SR02 pattern.xl'。/定义资源的根目录以及文件应该在哪里?与使用类的文件的java代码一起?文件应该位于src/main/resources中…并且该文件夹将被部署?它将是生成的war文件的一部分…在WEB-INF/classes中…抱歉,我更正了方法名称-它应该是Resource,而不是resources。从我的角度来看,我想补充一点,它确实有效,并指出在服务器中部署和从测试运行这两种情况下的正确文件夹。你不需要复制文件,它会自动复制到你需要的地方。