Java 从属性文件读取值

Java 从属性文件读取值,java,properties,Java,Properties,我试图读取单独的“GetConfigProperties”类文件中的属性文件,并将值传递给主函数“LoginTest.java”。但是我无法获得预期的属性值,代码中也没有显示错误 我在src/config.properties中有属性文件 我在src/com.automation.test->LoginTest.java中拥有主要功能 我有java函数来读取src/com.library.helper->GetConfigProperties.java中的属性文件 下面给出了读取配置属性的代码

我试图读取单独的“GetConfigProperties”类文件中的属性文件,并将值传递给主函数“LoginTest.java”。但是我无法获得预期的属性值,代码中也没有显示错误

我在src/config.properties中有属性文件 我在src/com.automation.test->LoginTest.java中拥有主要功能 我有java函数来读取src/com.library.helper->GetConfigProperties.java中的属性文件

下面给出了读取配置属性的代码

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties; 

public class GetConfigProperties {

//protected File file = new File("config.properties");
protected static Properties props = new Properties();
InputStream is = GetConfigProperties.class.getResourceAsStream("/config.properties");

    public static String extractUrlData(){
    String webUrl = props.getProperty("webUrl");
    return webUrl;
    }
}
-- 另外,我在主LoginTest.java中导入了这个类文件,并尝试以GetConfigProperties.ExtractUrlData()的形式访问获取数据,但失败了


另外,我查看了许多问题和答案,因为我对Java完全陌生,所以无法理解它们,因为一切似乎都是独一无二的。

以下是访问属性的方法:

GetConfigProperties.ExtractUrlData();
这将调用static方法
ExtractUrlData()
(应调用
ExtractUrlData()
,以符合Java命名约定)。在任何地方都不能调用
GetConfigProperties
GetConfigProperties()
方法,这是填充Properties对象的地方

您应该选择:属性是静态的,并且应该在加载类时通过静态方法或静态块填充:

private static Properties props = createAndPopulateProperties();
或者它应该是一个实例字段,可以由类构造函数或初始化对象的实例方法填充

另一个问题是,运行你的应用程序的用户将文件放在与你完全相同的文件夹中的可能性很低(如果他运行的是Windows)。您应该将属性文件与应用程序的.class文件捆绑在一起(在同一个jar或同一个目录中),并使用类加载器加载资源:

InputStream is = GetConfigProperties.class.getResourceAsStream("/config.properties");

为了独立于环境,您应该从类路径而不是文件系统中获取它。运行代码时会发生什么?你预计会发生什么?使用这个类的代码是什么?为什么要从同一个类的构造函数初始化一个类的静态字段?@JBN:那不是一个构造函数,只是一个名称不正确的方法(尽管更糟糕)。顺便说一句,令人惊讶的是(也很悲哀的是),一个以
[java]
为顶级标记的12K和3K用户甚至不知道如何通过类加载器从类路径获取简单资源的输入流。感谢BalusC,我同意这是一个名称不正确的方法,并将其修改为“GetPropertiesFileStream”。我最初提到如下,然后通过研究不同的stackoverflow问题对其进行了修改。。。受保护的文件=新文件(“config.properties”);请注意,属性文件以这种方式与
GetConfigProperties
位于完全相同的包中。看看JBNizet的答案,它有一个前导斜杠,它将从类路径的根(例如,从“默认”包)加载资源。如果
/ProjectName/src
确实是IDE所表示的类路径的根,那么这应该是可行的。非常感谢JBN。我完全删除了badlyNamedmethod方法,因为它现在不是必需的,并用InputStream替换了它们。但是你能让我知道我现在应该做些什么来检索基于关键字的值吗。。在我的例子中,需要使用“webUrl”**P.S提取“”-我修改了我最初的问题描述以反映最近的更改您忘记从输入流加载属性:
props.load(is)