2012-06-06 2 views
8

Ho visto alcune risposte su come caricare un file particolare all'interno di un jar tramite getResourceAsStream e posso gestirlo. Comunque sto affrontando qualcosa di veramente specifico e non sono riuscito a trovare una risposta a riguardo sul forum.Caricamento con ResourceBundle dall'interno di un jar

Ecco la configurazione:

Ho un file jar con un directory conf che contiene 2 file di proprietà messages_en_US.properties e messages_fr_FR.properties. Il modo classico per caricare tali risorse è quello di utilizzare

ResourceBundle.getBundle("messages", java.util.Locale.getDefault()); 

Se i file sono stati su disco, in una directory a cui fa riferimento il classpath programma, questo funziona bene. Ma non so come posso gestire combinando l'uso di ResourceBundle.getBundle e l'uso di risorse da witin in un barattolo. Infatti, poiché non riesco a vedere alcun bridge tramite getResourceAsStream (o questo implicherebbe la gestione della locale da solo per specificare l'intero nome del file di risorse, che non è molto intelligente).

Qualcuno può aiutare?

Grazie.

+0

Dove hai quel file nel JAR? se rimane in un JAR significa che ce l'hai nel classpath e non dovresti avere problemi a caricarlo normalmente con ResourceBundle.getBundle – rascio

+0

Ho lo stesso problema, ho una risorsa di proprietà all'interno di un file jar ma quel file jar è NON nel classpath dei programmi.Ho letto javadoc per PropertyResourceBundle e so che potrei farlo con inputstream ma inputstream significa che IO leggerà il file ogni volta e perderò la cache predefinita ResourceBundle. C'è un modo per dirigere la classe ResourceBundle per ottenere il bundle da una risorsa che è al di fuori del suo classpath? –

+0

Anche il ResourceBundle.Control può essere implementato per la personalizzazione ma sembra eccessivo, meglio trovare i modi per inserire i file delle proprietà nel classpath. –

risposta

1

Hai provato questo?

ResourceBundle.getBundle("conf/messages", java.util.Locale.getDefault()); 
10

Se è in una directory conf all'interno del vaso, quindi il pacchetto del fascio si sta cercando di caricare è conf, e si dovrebbe usare

ResourceBundle.getBundle("conf.messages", java.util.Locale.getDefault()); 

The javadoc dice:

baseName - the base name of the resource bundle, a fully qualified class name 
+0

3+ ore e finalmente questa risposta mi ha salvato la vita. +1 – xyz

+0

Il file JAR non significa che deve essere nel classpath. Penso che l'autore originale stia cercando di dire come accedere a un pacchetto di risorse quando si trova all'esterno del classpath. Un modo è usare PropertyResourceBundle con InputStream ma poi si perde la cache e ogni volta che si fa un bundle si deve fare un nuovo Bundle. Ho lo stesso problema, ho una risorsa che non è nel classpath. –

0

Il ResourceBundle cerca sempre un file delle proprietà, quindi, se si esegue:

ResourceBundle.getBundle("messages", java.util.Locale.getDefault()); 

Il ResourceBundle cercherà "messages.properties" nel classpath.

0

Supponendo che il file messages.properties fa parte di alcuni xyz.jar che è già in classpath del progetto in cui si desidera utilizzare questo. Imballaggio di questo file in vaso è il seguente:

src 
    |main 
     |resources 
      |com 
       |xyz 
        ....|message.properties 

Per leggere questo file:

import java.util.ResourceBundle; 

....

ResourceBundle.getBundle("com.xyz.resources.messages", Locale.getDefault()); 

Grazie