繁体   English   中英

无法在java中读取属性文件

[英]Unable to read properties file in java

我有一个主要的Class ,它是TestDriver.java ,我在其中调用functions例如读取到 excel 文件等等,为此,我需要在 java 中给出一个 excel 文件路径,所以我使用的是属性文件而不是硬编码,并使用它我正在调用我的函数。 为了读取属性文件,我已经给出了文件路径,但我无法读取属性文件...

文件:TestDriver.java

public class TestDriver 
{
      public static void main(String args[]){
            String filePath = "E:\\Project\\HRMSAutomation\\";

            Globals gbl = new Globals(filePath);

            // Functions.....

      }
}

文件:Globals.java

public class Globals 
{
    static String filePath;

    public Globals(String path) {
        this.filePath = path;
    }

    static Properties prop = Genlib.readConfig(filePath+"config.properties");
    //readConfig is a method which will read the properties file
    public static final String LOGIN_URL = prop.getProperty("loginUrl");   
}

文件:Config.properties

loginUrl = someurl....
testsRoot = tests
configFileDir = E:/Project/Automation/Data/ConfigData/

错误日志。

java.io.FileNotFoundException: nullconfig.properties (The system cannot find the file specified)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at gtlib.Genlib.readConfig(Genlib.java:96)
    at projlib.Globals.<clinit>(Globals.java:15)
    at testDrivers.TestDriver.main(TestDriver.java:89)

我收到错误,因为获取空值的 filePath 变量可能是Globals.java文件中的一些错误

我是 Java, static字段的初始化在构造函数之前运行。 所以,当它初始化时, filePath仍然是null 将初始化放在构造函数中,如下所示:

public class Globals {
    static String filePath;
    public Globals(String path) {
        this.filePath = path;
        prop = Genlib.readConfig(filePath+"config.properties"); //readConfig is a method which will read the properties file
    }
    static Properties prop;
    public static final String LOGIN_URL = prop.getProperty("loginUrl");
}

另外,如果这是一个static类,我建议您使用static方法来初始化它而不是构造函数。

猜猜您使用的是纯 Java 编码风格。

通过以下代码,您可以加载属性并检索某些参数

Properties prop = new Properties(); 
Class clazz = Object.class; 
InputStream stream = clazz.getResourceAsStream({path}/Config.properties"); prop.load(stream); 
filePath = prop.getProperty("configFileDir");

如果您使用 SpringBoot,工作会变得容易得多

config.properties文件是确切名称还是Config.properties

Globals.java你指的是: filePath+"config.properties"

我不确定 Genlib 但下面是加载属性文件的简单方法。 您必须提供的路径是文件的相对路径。 例如,文件可能位于

源代码/测试/资源

所以你只需要像下面那样做:

FileInputStream configFile = new FileInputStream("src/test/resources" + File.separator +  "config.properties");
Properties configProperties = new Properties();
configProperties.load(configFile);

您的文件路径是在类的构造函数中设置的,但您的属性对象使用的是静态类变量,该变量在创建该变量时进行初始化。

所以这意味着当你的属性对象被初始化时,文件路径还没有设置,所以属性试图打开“nullconfig.properties”的文件名。

为什么将它们存储为静态? 如果它们不是静态变量,您可以将它们全部移动到类变量中,并让构造函数打开属性文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM