如何从代码中动态找到属性文件的路径?

How to find the path of properties file dynamically from the code?

我在 Java 中有一个 Maven 项目,其中我在这个目录下有一个 属性 文件 (quartz.properties):

/src/main/resources

现在我可以从这个 class 以两种方式使用这个 属性 文件,如下所示:

/**
 * Create a StdSchedulerFactory that has been initialized via
 * <code>{@link #initialize(Properties)}</code>.
 *
 * @see #initialize(Properties)
 */
public StdSchedulerFactory(Properties props) throws SchedulerException {
    initialize(props);
}

/**
 * Create a StdSchedulerFactory that has been initialized via
 * <code>{@link #initialize(String)}</code>.
 *
 * @see #initialize(String)
 */
public StdSchedulerFactory(String fileName) throws SchedulerException {
    initialize(fileName);
}

我不确定如何使用 StdSchedulerFactory class 来提供我的 quartz.properties 文件的路径。

截至目前,我正在提供这样的硬编码路径,但这不是提供路径的正确方法,因为如果其他人 运行 在他们的台式机或笔记本电脑中使用此代码,那么它将无法工作。我将从我的桌面上 运行 这个应用程序,我也会制作一个可运行的 jar,所以我希望我的程序应该动态加载我的属性文件,而不需要任何硬编码路径。

public class TestingQuartz {
    public static void main(String[] args) throws SchedulerException {
        SchedulerFactory factory = new StdSchedulerFactory(
                "C:\workspace\tester_quartz\quartzmain\src\main\resources\quartz.properties");
        Scheduler scheduler = factory.getScheduler();
        scheduler.start();
    }
}

因为它似乎在您的 class 路径上,您可以这样做:

getClass().getClassLoader().getResource("quartz.properties").toExternalForm()

由于您的配置文件位于 mavenized 项目的 src/main/resources 中,它将嵌入到您使用 maven 构建的结果工件(jar,war...)中。因此你应该像这样加载文件 "from the classpath" :

    StdSchedulerFactory factory = new StdSchedulerFactory();
    factory.initialize(this.getClass().getClassLoader().getResourceAsStream("quartz.properties"));