【问题标题】:NullPointerException when referenceing properties file引用属性文件时出现 NullPointerException
【发布时间】:2017-06-14 08:03:29
【问题描述】:

我有以下方法:

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

这可以正常工作。我的问题是我不想硬编码文件路径/users/mypc/test/etc/one.json。我尝试通过执行以下操作将其添加到属性文件中:

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

我过去做过类似的事情,但这次我得到了 NullPointerException。我已经盯着这个看了一段时间,看不出有什么问题。我在属性文件中设置文件路径的方式有问题还是我错过了其他什么?

【问题讨论】:

  • 添加异常消息,以便我们更好地了解正在发生的事情。如果未找到文件,则应抛出 FileNotFound 异常,而不是 NPE。所以我认为你的问题在其他地方。
  • 我发现了问题。你的PropertiesHelper helper 永远不会被创建。添加PropertiesHelper helper = new PropertiesHelper();
  • 另外,谁对这个问题投了反对票;这是不合理的。即使解决方案很简单,问题的格式也很好。
  • 啊,就是这样。干杯。

标签: nullpointerexception properties-file


【解决方案1】:

以上由 Donnacha 回答。

通过添加私有静态 PropertiesHelper helper = new PropertiesHelper(); 解决了这个问题到 JsonReader.java。见下文:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2015-05-26
    • 2016-08-22
    • 2012-02-08
    • 1970-01-01
    相关资源
    最近更新 更多