2013-11-22 4 views
28

Ich versuche, eine Dienstprogrammklasse ReadPropertyUtil.java zum Lesen von Daten aus der Eigenschaftendatei zu erstellen. Während sich meine Klasse in einem util-Verzeichnis befindet, wird meine -Datei in einem anderen Verzeichnis abgelegt.java.util.MissingResourceException: Bündel für Basisname 'Eigenschaftsdateiname', Gebietsschema nicht gefunden en_US

Aber wenn ich versuche, die Eigenschaften mit [ResourceBundle][1] zugreifen, bekomme ich Ausnahmen, das Bündel kann nicht geladen werden.

Unten ist der Code, wie ich die Eigenschaften lese und auch ein Bild, das meine Verzeichnisstruktur zeigt.

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

Verzeichnisstruktur

enter image description here

Diese Linie gibt den Fehler private static ResourceBundle resourceBundle = ResourceBundle.getBundle(FILENAME);

vermögen mich nicht zu verstehen, warum dies nicht ist wor König und was ist die Lösung. Der Ordner src wurde bereits vollständig im Build-Pfad hinzugefügt.

Antwort

29

für die Ressource mit den voll qualifizierten Namen Versuche arbeiten:

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

Ja! Vollqualifizierter Name Ich habe das versucht, aber mit relativen Pfaden gearbeitet. Das hat funktioniert! –

17

ResourceBundle lädt keine Dateien? Sie müssen die Dateien zuerst in eine Ressource bringen. Wie wäre es gerade in ein FileInputStream Laden dann einem PropertyResourceBundle

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

Oder wenn Sie das Gebietsschema spezifischen Code benötigen, so etwas wie dies sollte

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

Ich denke, beim Zugriff von Ressourcenbündel ... benötigen Sie nur den Vornamen und nicht die Erweiterung coz I Habe ein Maven Projekt Beispiel wo ich die Erweiterung nicht erwähnt habe und dann hat es auch geklappt. –

+2

Obwohl ich es nicht versucht habe, aber scheint zu arbeiten. Nun, die obige Antwort, die den voll qualifizierten Namen verwendet, macht den Trick. Und sehen Sie, keine Erweiterung erforderlich. :) –

4

Verwenden Sie die Ressource wie

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

Geben Sie einfach den qualifizierten Pfad .. Es funktioniert für mich !!!

5

Sie sollten Eigenschaft Dateiname festlegen, ohne .properties Erweiterung, es richtig funktioniert für mich :)

2

Ich mag würde meine Erfahrung mit Ant in Bauprojekten teilen, * .properties-Dateien sollten explizit kopiert werden. Dies liegt daran, dass Ant * .properties-Dateien standardmäßig nicht in das Build-Arbeitsverzeichnis kompiliert (javac ignoriert einfach * .properties). Zum Beispiel:

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

Bitte beachten Sie, dass ‚Kopie‘ Abschnitt unter dem Ziel ‚zusammenstellen‘, es PROPERTIES-Dateien in das Build-Arbeitsverzeichnis replizieren. Ohne den Abschnitt 'copy' enthält die JAR-Datei keine Eigenschaftendateien. Dann kann die java.util.MissingResourceException auftreten.

1

mit Eclipse und Windows:

Sie haben 2-Dateien kopieren - xxxPROJECTxxx.Eigenschaften - log4j.properties hier: C: \ Eclipse \ CONTENER \ TOMCAT \ Apache-Tomcat-7 \ lib

Verwandte Themen