1

我正在使用 Maven onejar 插件 ( https://code.google.com/p/onejar-maven-plugin/ ) 创建一个 uberjar。

我想访问位于我的类路径根目录中的属性文件,如下所示:

Properties prop = new Properties();

        try {
            prop.load(new FileInputStream("Db.properties"));

            driver = prop.getProperty("driver");
            url = prop.getProperty("url");
            username = prop.getProperty("username");
            password = prop.getProperty("password");

        } catch (IOException ex) {
            LOG.debug(ex.toString());
        }   

        conn = null;

找到了位于同一目录中的 log4j.properties 文件,因为我可以进行日志记录...我的问题是什么?:/ 但是找不到 Db.properties。

4

1 回答 1

1

FileInputStream用于从位于文件系统上的文件中加载资源。jar 中的文件不在文件系统上。您需要使用不同的InputStream

对于这种情况,建议使用ClassLoader#getResourceAsStream(String)方法。它返回在类路径中找到的 InputStream 资源。就像是:

InputStream is = getClass().getClassLoader().getResourceAsStream("/Db.properties");

应该管用。或者为了方便:

InputStream is = getClass().getResourceAsStream("/Db.properties");

值得注意的是,之所以如此,log4j.properties是因为 Log4j 在设计上可以在根类路径中加载配置文件。

于 2013-03-22T18:09:52.527 回答