2016-05-14 5 views
1

Dies ist mein Code zum Lesen der Datei .properties in meinem Projekt.Eigenschaftendatei nicht im Jar gefunden

public class Configuration { 

    private static JSONObject readConfigFile(File filename) throws JSONException { 

     JSONObject configProperties = new JSONObject(); 
     Properties prop = new Properties(); 
     InputStream input = null; 

     try { 

      input = new FileInputStream(filename); 

      // load a properties file 
      prop.load(input); 

      // get the property value and print it out 


     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } finally { 
      if (input != null) { 
       try { 
        input.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

     return configProperties; 

    } 

    public static JSONObject loadConfigurationDetails(String configFilePath) throws JSONException { 
     JSONObject configurationDetails = new JSONObject(); 

     File configFile = new File(configFilePath); 

     if(configFile.exists()){ 
      configurationDetails = readConfigFile(configFile); 
     }else{ 
      System.out.println("configuration.properties file not found"); 
      System.exit(0); 
     } 

     return configurationDetails; 
    } 

    public static JSONObject loadConfigurationDetails() throws JSONException { 

     String configFilePath = "configuration.properties"; 

     JSONObject loadConfigurationDetails = loadConfigurationDetails(configFilePath); 

     return loadConfigurationDetails; 
    } 
} 

Das folgende ist meine Projektstruktur

Projektname
-src
-target
-properties
-pom.xml

Sie meine Projektstruktur anzeigen kann Datei: link

Meine Eigenschaftsdatei ist un der Wurzelprojekt. Ich kann diese Datei nicht lesen, wenn ich eine JAR-Datei erstelle und sie ausführe. Ich bekomme Datei nicht für die Eigenschaftendatei gefunden.

In meinem Haupt Methode, die ich meine Methode nenne wie folgt:

JSONObject loadConfigurationDetails = Configuration.loadConfigurationDetails(); 

Modified-Code und Fehler

public class Configuration { 

    public static JSONObject loadConfigurationDetails() throws JSONException { 

    Properties prop = new Properties(); 
    String filePath = ""; 
     JSONObject configProperties = new JSONObject(); 
    try { 

     InputStream inputStream = 
     Configuration.class.getClassLoader().getResourceAsStream("configuration.properties"); 

     prop.load(inputStream); 
     configProperties.put("URL",prop.getProperty("URL","")); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return configProperties; 

    } 

} 


Exception in thread "main" java.lang.NullPointerException 
    at java.util.Properties$LineReader.readLine(Properties.java:434) 
    at java.util.Properties.load0(Properties.java:353) 
    at java.util.Properties.load(Properties.java:341) 
    at com.demo.main.Configuration.loadConfigurationDetails(Configuration.java:33) 
    at com.demo.main.Run.main(Run.java:30) 
+0

Ressourcen sind keine Dateien und kann nicht mit 'FileInputStream' oder seinen Verwandten erreicht werden. Sie sollten 'Class.getResource()' und Freunde verwenden. – EJP

+0

Bitte schauen Sie sich meinen modifizierten Code und meine Projektstruktur an. In meinem modifizierten Code bekomme ich Nullzeiger Ausnahme, weil die Datei nicht gefunden wird. Bitte sehen Sie meine Projektstruktur. Danke für Ihre Antwort. –

+0

Ich habe den Code von Alan Hay Sir in den Link von MKYONG –

Antwort

1

Sie es aus dem Classpath müssen lesen. So ist es unter der Annahme, in der Wurzel der JAR-Datei (die es im Rahmen eines Standard-Maven Projekt Layout src/main/resources/my.props wäre):

input = Configuration.class.getResourceAsStream(filename); 

http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getResourceAsStream(java.lang.String)

+0

verwendet Dieser Fehler bekomme ich, wenn ich die obige Methode verwenden: nicht statische Variable Dies kann nicht aus einem statischen Kontext verwiesen werden. weil meine Funktionen statisch sind. Wenn ich statische Schlüsselwörter aus meinen Funktionen entferne, funktioniert das. Aber ich kann nicht meine Methode in der Hauptmethode aufrufen. Es wird mir auch den gleichen Fehler geben. –

+0

Aktualisiert: http: //www.mkyong.com/java/java-getresourceastream-in-static-method/ –

+0

Sir Ich habe meine Frage bearbeitet und den Null-Zeiger gepostet, mit dem ich jetzt konfrontiert bin. Danke für Ihre Antwort. –