当项目部署在服务器上时,以及当它的 类 是来自测试 类 的 运行 时,如何使文件可见?

How can I make a file visible both when project is deployed on a server and when its classes are run from test classes?

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

FileInputStream fileInputStream = new FileInputStream("SR02_pattern.xls");

(文件在\apv\main-app目录下),不会部署,当然在服务器上运行时也看不到。

如果我把文件放在/apv/main-web/WEB-INF/classes/目录下,它会被部署,我可以通过

调用它
InputStream inStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("SR02_pattern.xls")

当项目部署在服务器上时,但如果 class 是测试中的 运行,则该行不会读取文件。

可能,getResourceAsStream("SR02_pattern.xls") 查找文件的位置是由一些系统属性设置的,我可以使用它们,但我不知道哪些属性可以提供帮助。

如何在两种情况下使用相同的代码读取文件而不将其作为参数传递给 class?

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

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

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

您要阅读的文件应位于 src/main/resources。这将导致最终的 war 包位于 WEB-INF/classes.

位置