2017-06-14 3 views
0

Datei Ich habe die unten Methode:Nullpointer wenn referenceing Eigenschaften

public String readJson(){ 
    String everything = ""; 
    try(BufferedReader br = new BufferedReader(new FileReader("https://stackoverflow.com/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; 
} 

Dies funktioniert gut, wie es ist. Mein Problem ist, dass ich den Dateipfad /users/mypc/test/etc/one.json nicht hart codieren möchte. Ich habe versucht, es zu einer Properties-Datei hinzufügen, indem Sie folgendermaßen vorgehen:

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

Ich habe in der Vergangenheit ähnliche Dinge gemacht, aber diesmal bekomme ich eine NullPointerException. Ich habe das schon eine ganze Weile beobachtet und kann nicht sehen, was los ist. Ist etwas nicht in Ordnung mit der Art, wie ich meinen Dateipfad in der Eigenschaftendatei festgelegt habe oder gibt es etwas anderes, das ich übersehen habe?

+0

Fügen Sie die Ausnahmebedingung hinzu, damit wir eine bessere Vorstellung davon haben, was vor sich geht. Eine FileNotFound-Ausnahme sollte ausgelöst werden, wenn die Datei nicht gefunden wird, keine NPE. Also ich denke dein Problem ist woanders. – DCON

+1

Ich habe das Problem gefunden. Dein 'PropertiesHelper-Helfer' wird nie erstellt. Add in 'PropertiesHelper helper = new PropertiesHelper();' – DCON

+0

Auch wer die Frage abgelehnt hat; das ist nicht gerechtfertigt. Die Frage ist gut formatiert, auch wenn die Lösung einfach ist. – DCON

Antwort

0

Beantwortet oben von Donnacha.

Das Problem wurde behoben, indem private statische Eigenschaften hinzugefügt wurdenHelper helper = new PropertiesHelper(); zu JsonReader.java. Siehe unten:

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