简体   繁体   中英

Unable to read properties file from java

I am unable to read the properties from the file . When I try to print it gives me null, When I debugged I understood it is not loading the file in function pro.Load() . However my path is correct, still I am unable to load the file

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"));

  }

}

Properties file contents

firstname = John
lastname = harry
Automation = Selenium

I think the problem is in path:

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

should be like this:

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

Also make sure you have a correct path to your properties file. If it is inside your project, the path should be like this:

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

Your example works fine for me. Without a stacktrace though, we won't be able to help you regarding the NPE you're getting.

In any way though, I couple of hints regarding your code. I would suggest using a try - with resources when operating with the FileInputStream to make sure that the resource is going to be closed once done.

You can avoid using new File(path); . Instead I would suggest using Paths from the java.nio.* package. An example of this based on your code snippet would be the following:

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"));
}

The advantage of using Paths is that they're (if not mistaken) system agnostic meaning that you won't need to worry about providing the proper path delimiters.

Actually, path should be with another separator

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

but what I should suggest you - it's to store your app properties files under your resource folder, kinda:

src/main/resources/config.properties

than you gonna be able to access this file like this:

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");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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