【问题标题】:Unable to read properties file from java无法从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

【问题讨论】:

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

标签: java eclipse selenium properties-file


【解决方案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");
    

    【讨论】:

      猜你喜欢
      • 2013-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      相关资源
      最近更新 更多