Search code examples
nullpointerexceptionproperties-file

NullPointerException when referenceing properties file


I have the below method:

public String readJson(){
    String everything = "";
    try(BufferedReader br = new BufferedReader(new FileReader("/users/mypc/test/etc/one.json"))) {
        StringBuilder sb = new StringBuilder();
        String line = br.readLine();

        while (line != null) {
            sb.append(line);
            sb.append(System.lineSeparator());
            line = br.readLine();
        }
        everything = sb.toString();
        logger.debug("Everything: " + everything);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    logger.debug("line: " + everything);
    return everything;
}

This works fine as it is. My problem is that I don't want to hard code the file path /users/mypc/test/etc/one.json. I tried adding it to a properties file by doing the following:

test.properties:

file1=/users/mypc/test/etc/one.json

PropertiesHelper.java:

public String GET_FILE_ONE = "file1";

private static String one;

public String getJsonFile(){
    one = config.getProperty(this.GET_FILE_ONE);
    return one;
}

JsonReader.java:

private static PropertiesHelper helper;

final String GET_FILE_ONE = helper.getJsonFile();

public String readJson(){
String everything = "";
try(BufferedReader br = new BufferedReader(new FileReader(GET_FILE_ONE))) {
    StringBuilder sb = new StringBuilder();
    String line = br.readLine();

    while (line != null) {
        sb.append(line);
        sb.append(System.lineSeparator());
        line = br.readLine();
    }
    everything = sb.toString();
    logger.debug("Everything: " + everything);
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
logger.debug("line: " + everything);
return everything;
}

I've done similar things in the past but this time I'm getting a NullPointerException. I've been staring at this for a while now and can't see what's wrong. Is there something wrong with the way I've set my file path in the properties file or is there something else I've missed?


Solution

  • Answered above by Donnacha.

    The issue was resolved by adding private static PropertiesHelper helper = new PropertiesHelper(); to JsonReader.java. See below:

    private static PropertiesHelper helper;
    
    private static PropertiesHelper helper = new PropertiesHelper();
    
    final String GET_FILE_ONE = helper.getJsonFile();
    
    public String readJson(){
        String everything = "";
        try(BufferedReader br = new BufferedReader(new FileReader(GET_FILE_ONE))) {
            StringBuilder sb = new StringBuilder();
            String line = br.readLine();
    
            while (line != null) {
                sb.append(line);
                sb.append(System.lineSeparator());
                line = br.readLine();
            }
            everything = sb.toString();
            logger.debug("Everything: " + everything);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        logger.debug("line: " + everything);
        return everything;
    }