【问题标题】:What is the path to resource files in a Maven project?Maven项目中资源文件的路径是什么?
【发布时间】:2011-03-07 11:39:15
【问题描述】:

在我的 Maven 项目中,我在 main 方法中有以下代码:

FileInputStream in = new FileInputStream("database.properties");

但总是得到文件未找到错误。

我已将文件放入 src/main/resources 并正确复制到 target/classes 目录(我相信这是 Maven 资源的预期行为),但在实际运行程序时,它似乎永远找不到文件。我尝试了其他各种途径:

FileInputStream in = new FileInputStream("./database.properties");
FileInputStream in = new FileInputStream("resources/database.properties");

等等。但似乎没有任何效果。

那么正确的使用路径是什么?


根据下面的“拒绝”回答,这就是我需要的:

InputStream in = TestDB.class.getResourceAsStream("/database.properties")

其中TestDB 是类的名称。

感谢您的帮助,拒绝!

【问题讨论】:

    标签: java maven-2


    【解决方案1】:

    您不能像那样直接加载文件,您需要使用资源抽象(资源不仅可以在文件系统中,还可以在类路径上的任何位置 - 在 jar 文件中或其他地方)。这个抽象是你在加载资源时需要用到的。资源路径是相对于你的类文件的位置的,所以你需要在前面加上一个斜杠才能到达'root':

    InputStream in = getClass().getResourceAsStream("/database.properties");
    

    【讨论】:

    • 如果您尝试从静态方法访问文件,getClass() 不起作用。在这种情况下有替代方案吗?
    • 使用类名,例如 Main.class.getResourceAsStream()。您可以使用任何类或类加载器,因此 hd.getContextClassLoader().getResourceAsStream() 也可以。
    猜你喜欢
    • 2017-08-30
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2018-12-19
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    相关资源
    最近更新 更多