from Lettura del file delle proprietà in Java




java properties syntax (8)

Non puoi usare questa parola chiave come -

props.load(this.getClass().getResourceAsStream("myProps.properties"));

in un contesto statico.

La cosa migliore sarebbe ottenere il contesto dell'applicazione come -

ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/META-INF/spring/app-context.xml");

quindi è possibile caricare il file di risorse dal classpath -

//load a properties file from class path, inside static method
        prop.load(context.getClassLoader().getResourceAsStream("config.properties"));

Ciò funzionerà sia per il contesto statico che per quello non statico e la parte migliore è che questo file delle proprietà può trovarsi in qualsiasi pacchetto / cartella incluso nel classpath dell'applicazione.

Ho il seguente codice che prova a leggere un file delle proprietà:

Properties prop = new Properties();
ClassLoader loader = Thread.currentThread().getContextClassLoader();           
InputStream stream = loader.getResourceAsStream("myProp.properties");
prop.load(stream);

Ottengo un'eccezione nell'ultima riga. In particolare:

Exception in thread "main" java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:418)
at java.util.Properties.load0(Properties.java:337)
at java.util.Properties.load(Properties.java:325)
at Assignment1.BaseStation.readPropertyFile(BaseStation.java:46)
at Assignment1.BaseStation.main(BaseStation.java:87)

grazie, Nikos


Answer #1

È possibile utilizzare java.io.InputStream per leggere il file come mostrato di seguito:

InputStream inputStream = getClass().getClassLoader().getResourceAsStream(myProps.properties); 

Answer #2

Dato il contesto loader.getResourceAsStream("myPackage/myProp.properties") dovrebbe essere usato.

Il comando '/' non funziona con il metodo ClassLoader.getResourceAsStream(String) .

In alternativa è possibile utilizzare il Class.getResourceAsStream(String) , che utilizza '/' per determinare se il percorso è assoluto o relativo alla posizione della classe.

Esempi:

myClass.class.getResourceAsStream("myProp.properties")
myClass.class.getResourceAsStream("/myPackage/myProp.properties")

Answer #3

È possibile utilizzare la classe ResourceBundle per leggere il file delle proprietà.

ResourceBundle rb = ResourceBundle.getBundle("myProp.properties");

Answer #4

In base all'eccezione, InputStream è null, questo significa che il programma di caricamento classi non trova il file delle proprietà. Immagino che myProp.properties sia nella radice del tuo progetto, se questo è il caso, hai bisogno di una barra precedente:

InputStream stream = loader.getResourceAsStream("/myProp.properties");

Answer #5
Properties prop = new Properties();

try {
    prop.load(new FileInputStream("conf/filename.properties"));
} catch (IOException e) {
    e.printStackTrace();
}

conf/filename.properties base sulla directory principale del progetto


Answer #6


Puoi trovare informazioni su questa pagina:
http://www.mkyong.com/java/java-properties-file-examples/

Properties prop = new Properties();
try {
    //load a properties file from class path, inside static method
    prop.load(App.class.getClassLoader().getResourceAsStream("config.properties"));

    //get the property value and print it out
    System.out.println(prop.getProperty("database"));
    System.out.println(prop.getProperty("dbuser"));
    System.out.println(prop.getProperty("dbpassword"));

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

Answer #7

Assicurarsi che il nome del file sia corretto e che il file si trovi effettivamente nel percorso della classe. getResourceAsStream() restituirà null se questo non è il caso che fa sì che l'ultima riga lanci l'eccezione.

Se myProp.properties si trova nella directory principale del progetto, utilizzare invece /myProp.properties .





properties