无法从java读取属性文件

Posted

技术标签:

【中文标题】无法从java读取属性文件【英文标题】:Unable to read properties file from java 【发布时间】:2018-12-23 05:15:20 【问题描述】:

我无法从文件中读取属性。当我尝试打印时它给了我null,当我调试时我明白它没有在函数中加载文件 pro.Load()。但是我的路径是正确的,我仍然无法加载文件

package AdvancedJava;

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

public class ReadingPropertiesFile 

public static void main(String[] args) throws FileNotFoundException 
    Properties pro = new Properties();

    String path = "C://Users//310259741//Documents//ProjectManagment//JavaBasics//object.properties";

    // BufferedReader reader = new BufferedReader(new FileReader(path));
    File f = new File(path);
    FileInputStream fis = null;
    try 
        fis = new FileInputStream(f);
        pro.load(fis);
    

    catch (IOException e) 
        System.out.println(e.getMessage());
    

    System.out.println(pro.getProperty("lastname"));

  


属性文件内容

firstname = John
lastname = harry
Automation = Selenium

【问题讨论】:

你能发布堆栈跟踪吗? 为什么要使用双斜杠?是否有任何错误信息正在打印?为什么不打印完整的堆栈跟踪? 【参考方案1】:

我认为问题出在路径上:

String path = "C://Users//310259741//Documents//ProjectManagment//JavaBasics//object.properties";

应该是这样的:

String path = "C:\\Users\\310259741\\Documents\\ProjectManagment\\JavaBasics\\object.properties";

还要确保属性文件的路径正确。如果它在你的项目中,路径应该是这样的:

String path = "C:\\...\\ProjectFolder\\src\\main\\resources\\object.properties";

【讨论】:

您确定您的object.properties 文件具有lastname 属性吗? 这是我的属性 firstname = John lastname = harry Automation = Selenium 我很确定您的属性文件路径是错误的。你在项目中有你的属性文件吗?我已经编辑了我的答案,请看一下 成功了,我只是将文件名从 object.properties 重命名为 config.properties 我在文件名中犯了错误..我纠正了它,非常感谢你【参考方案2】:

你的例子对我来说很好。但是,如果没有堆栈跟踪,我们将无法为您提供有关您获得的 NPE 的帮助。

无论如何,我对您的代码有几点提示。我建议在使用 FileInputStream 操作时使用 try - with resources 以确保资源在完成后将被关闭。

您可以避免使用new File(path);。相反,我建议使用java.nio.* 包中的Paths。基于您的代码 sn-p 的示例如下:

public static void main(String[] args) 
    Properties properties = new Properties();
    try (FileInputStream stream = new FileInputStream(Paths.get("E:\\test\\file.txt").toFile())) 
        properties.load(stream);
     catch (IOException e) 
        e.printStackTrace();
    
    System.out.println(properties.getProperty("lastname"));

使用Paths 的优势在于它们(如果没有记错的话)与系统无关,这意味着您无需担心提供正确的路径分隔符。

【讨论】:

【参考方案3】:

其实路径应该是另外一个分隔符

"C:\\Users\\310259741\\Documents\\ProjectManagment\\JavaBasics\\object.properties";

但我应该建议您 - 将您的应用程序属性文件存储在您的资源文件夹下,有点:

src/main/resources/config.properties

你可以像这样访问这个文件:

public Properties extractFrom(String fileName) 
    Properties properties = new Properties();

    try (InputStream inputStream = PropertiesExtractor.class
            .getClassLoader().getResourceAsStream(fileName)) 
        properties.load(inputStream);
     catch (IOException ex) 
        throw new RuntimeException("Cannot load properties", ex);
    

    return properties;


extractFrom("config.properties");

【讨论】:

以上是关于无法从java读取属性文件的主要内容,如果未能解决你的问题,请参考以下文章

docker上的Spring启动无法从资源中读取属性文件,但可以在没有Docker的情况下使用java -jar

无法从 Java Spring Boot 项目中的 application.yml 文件中读取用户定义类的列表

TypeError:无法读取从带有已定义模板的 JSON 文件中读取的未定义属性(读取“array_google”)

“帮助修复”错误:无法从文件中读取属性列表:info.plist

java.lang.IllegalStateException:无法从jar文件spring-plugin-core-1.2.0.RELEASE.jar的清单中读取Class-Path属性

如何从java中的配置文件中读取嵌套属性