如何在Java中检索外部.properties文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Java中检索外部.properties文件?相关的知识,希望对你有一定的参考价值。

我尝试从项目外部的目录加载属性文件时遇到以下问题。

所以我的项目有以下结构:

PROJECT-ROOT
     |
     |
     |-----> confi
     |
     |------> src
               |
               |
               |------> mainPkg (the package name)
                           |
                           |
                           |------> Main (the main class containing the main() method)

好吧,进入主类我需要加载位于项目根文件夹之外的config.properties文件(例如在同一级别)。所以我认为config.properties文件在应用程序类路径的外部。

所以我试着这样做:

InputStream input = new FileInputStream("../../config.properties");

要么

InputStream input = new FileInputStream("../../../config.properties");

但是因为我获得以下异常而无法工作:

java.io.FileNotFoundException: ....config.properties (Impossibile trovare il file specificato)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:120)
    at java.io.FileInputStream.<init>(FileInputStream.java:79)
    at mainPkg.Main.main(Main.java:41)

如果我使用这样的绝对路径它的工作原理:

InputStream input = new FileInputStream("C:\Projects\edi-sta\config.properties");

并正确检索InputStrea对象。但这对我的目的不利,因为我不能使用绝对路径。

如何使用相对路径检索位于项目根文件夹的同一级别的config.properties文件?

答案

您的项目根目录将是您程序的当前工作目录。所以,你应该尝试

InputStream input = new FileInputStream("../config.properties");

但这不是推荐的设置。该文件应放在项目目录中,并且在发布应用程序时应该适当地使用jar文件。

另一答案

如果config.properties文件超出类路径,则应使用文件夹作为起点(例如用户文件夹或当前工作文件夹)。

相反,如果文件在您的类路径中,您可以尝试使用this.class.getResourceAsStream或this.class.getClassLoader()。getResourceAsStream()。

在一个简单的上下文中,两个invokations之间的区别非常简单:this.class.getResoursceAsStream(“config.properties”)将返回一个InputStream,当且仅当该文件位于调用该方法的同一个类包中时。

相反,只有当文件位于类路径的根目录时,this.class.getClassLoader()。getResourceAsStream(“config.properites”)才会返回相同的InputStream。在这种情况下,您必须将“config”文件夹添加到类路径中

以上是关于如何在Java中检索外部.properties文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django Rest Framework 中检索外部 JSON 文件以用于 React?

FLINK 基于1.15.2的Java开发-如何使用外部配置文件

SpringBoot的jar包引用外部properties文件

如何在 Spring 的 Tomcat Web 服务器中外部化 application.properties?

如何将 application.properties 外部化到 Spring Boot 中的外部文件系统位置?

从外部 Jar 加载属性文件