2012-06-06 6 views
8

Widziałem kilka odpowiedzi dotyczących ładowania konkretnego pliku w słoiku poprzez getResourceAsStream, i mogę to zarządzać. Jednak mam do czynienia z czymś naprawdę konkretnym, nie mogłem znaleźć odpowiedzi na ten temat na forum.Ładowanie z ResourceBundle z wnętrza słoiczka

Oto konfiguracja:

Mam plik jar o conf katalog, który zawiera 2 właściwości plików messages_en_US.properties i messages_fr_FR.properties. Klasyczny sposób załadować tych zasobów jest użycie

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

Jeśli pliki są na dysku, w katalogu wskazywanym przez ścieżce klasy programm, to działa prawidłowo. Ale nie wiem, jak mogę zarządzać łączeniem korzystania z ResourceBundle.getBundle i wykorzystania zasobów z słoika. Rzeczywiście, ponieważ nie widzę żadnego mostu przez getResourceAsStream (lub to oznaczałoby zarządzanie lokalizacjami przez siebie, aby określić całą nazwę pliku zasobów, która nie jest zbyt inteligentna).

Czy ktoś może pomóc?

Dzięki.

+0

Skąd masz ten plik w słoiku? jeśli pozostanie w JAR oznacza, że ​​masz go w ścieżce klas i nie powinieneś mieć problemu z załadowaniem go normalnie z ResourceBundle.getBundle – rascio

+0

Mam ten sam problem, mam zasób właściwości wewnątrz pliku jar, ale ten plik JAR jest NIE w ścieżce klas programów.Czytałem javadoc dla PropertyResourceBundle i wiem, że mógłbym to zrobić z inputstream, ale inputstream oznacza IO, że będzie czytał plik za każdym razem i stracę domyślne buforowanie ResourceBundle. Czy istnieje sposób kierowania klasą ResourceBundle, aby uzyskać pakiet z zasobu spoza jego ścieżki klas? –

+0

Również ResourceBundle.Control można zaimplementować w celu dostosowania, ale wydaje się przesadą, lepiej znaleźć sposoby na umieszczenie plików właściwości w ścieżce klas. –

Odpowiedz

1

Czy próbowałeś tego?

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

Jeśli jest w katalogu conf wewnątrz słoika, a następnie pakiet wiązki którą próbujesz załadować jest conf i należy użyć

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

The javadoc mówi:

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

Ponad 3 godziny i wreszcie ta odpowiedź uratowała mi życie. +1 – xyz

+0

Plik JAR nie oznacza, że ​​musi znajdować się w ścieżce klas. Myślę, że oryginalny autor próbuje powiedzieć, jak uzyskać dostęp do pakietu zasobów, gdy znajduje się poza ścieżką klasy. Jednym ze sposobów jest użycie PropertyResourceBundle z InputStream, ale wtedy tracisz pamięć podręczną, a gdy tylko zrobisz pakiet, musisz zrobić nowy pakiet. Mam ten sam problem, mam zasób, którego nie ma w ścieżce klas. –

0

ResourceBundle zawsze wyszukuje plik właściwości, więc jeśli uruchomisz:

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

ResourceBundle wyszuka "messages.properties" w ścieżce klas.

0

Zakładając, że plik messages.properties jest częścią pliku xyz.jar, który znajduje się już na ścieżce klas projektu, w której chcesz go użyć. Opakowania z tego pliku w słoiku jest jak poniżej:

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

Aby odczytać ten plik

import java.util.ResourceBundle; 

....

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

Thanks

Powiązane problemy