2013-11-22 21 views
28

Sto cercando di creare una classe di utilità ReadPropertyUtil.java per la lettura dei dati da file di proprietà. Mentre la mia classe si trova in una directory util, il mio file skyscrapper.properties viene inserito in un'altra directory.java.util.MissingResourceException: Impossibile trovare bundle per nome di base 'nome property_file', locale en_US

Tuttavia, quando provo ad accedere alle proprietà utilizzando [ResourceBundle][1], ottengo eccezioni, non è possibile caricare il pacchetto.

Di seguito si riporta il codice di come sto leggendo le proprietà e anche un'immagine che mostra la mia struttura di directory.

ReadPropertiesUtil.java

/** 
* Properties file name. 
*/ 
private static final String FILENAME = "skyscrapper"; 

/** 
* Resource bundle. 
*/ 
private static ResourceBundle resourceBundle = ResourceBundle.getBundle(FILENAME); 

/** 
* Method to read the property value. 
* 
* @param key 
* @return 
*/ 
public static String getProperty(final String key) { 
    String str = null; 
    if (resourceBundle != null) { 
     str = resourceBundle.getString(key); 
      LOGGER.debug("Value found: " + str + " for key: " + key); 
    } else { 
      LOGGER.debug("Properties file was not loaded correctly!!"); 
    } 
    return str; 
} 

struttura di directory

enter image description here

Questa linea sta dando l'errore private static ResourceBundle resourceBundle = ResourceBundle.getBundle(FILENAME);

Non riesco a capire perché non è questo wor re e qual è la soluzione. La cartella src è già stata aggiunta completamente nel percorso di compilazione.

risposta

29

Prova con il nome completo per la risorsa:

private static final String FILENAME = "resources/skyscrapper"; 
+0

Sì! Nome completo Stavo provando questo, ma stavo lavorando con percorsi relativi. Questo ha funzionato! –

17

ResourceBundle non caricare i file? È necessario prima ottenere i file in una risorsa. Che ne dite di caricare solo in un FileInputStream poi un PropertyResourceBundle

FileInputStream fis = new FileInputStream("skyscrapper.properties"); 
    resourceBundle = new PropertyResourceBundle(fis); 

O se è necessario il codice specifico locale, una cosa del genere dovrebbe funzionare

File file = new File("skyscrapper.properties"); 
URL[] urls = {file.toURI().toURL()}; 
ClassLoader loader = new URLClassLoader(urls); 
ResourceBundle rb = ResourceBundle.getBundle("skyscrapper", Locale.getDefault(), loader); 
+1

Credo che quando si accede dal pacchetto di risorse ... si richiedono solo il primo nome e non l'estensione coz I ho un esempio di progetto di maven in cui non ho menzionato l'estensione e poi ha funzionato. –

+2

Anche se non l'ho provato, sembra funzionare. Bene, la risposta di cui sopra, usando il nome completo, fa il trucco. E vedi, nessuna estensione richiesta. :) –

4

utilizzare la risorsa come

012.
ResourceBundle rb = ResourceBundle.getBundle("com//sudeep//internationalization//MyApp",locale); 
or 
ResourceBundle rb = ResourceBundle.getBundle("com.sudeep.internationalization.MyApp",locale); 

basta dare il percorso completo .. Il suo funzionamento per me !!!

5

È necessario impostare il nome del file proprietà senza .properties estensione, funziona correttamente per me :)

2

vorrei condividere la mia esperienza di utilizzo di Ant in progetti di costruzione, i file * .properties dovrebbe essere copiati in modo esplicito . Questo perché Ant non compilerà i file * .properties nella directory di lavoro build di default (javac ignora semplicemente * .properties). Per esempio:

<target name="compile" depends="init"> 
    <javac destdir="${dst}" srcdir="${src}" debug="on" encoding="utf-8" includeantruntime="false"> 
     <include name="com/example/**" /> 
     <classpath refid="libs" /> 
    </javac> 
    <copy todir="${dst}"> 
     <fileset dir="${src}" includes="**/*.properties" /> 
    </copy> 
</target> 

<target name="jars" depends="compile"> 
    <jar jarfile="${app_jar}" basedir="${dst}" includes="com/example/**/*.*" /> 
</target> 

Si prega di notare che la sezione 'copia' sotto il target 'compilazione', sarà replicare i file * .properties nella directory di lavoro di compilazione. Senza la sezione 'copia' del file jar non conterrà i file di proprietà, allora è possibile verificare il java.util.MissingResourceException.

1

con Eclipse e Windows:

dovete copiare 2 file - xxxPROJECTxxx.proprietà - log4j.properties qui: C: \ Eclipse \ contener \ TOMCAT \ apache-tomcat-7 \ lib