2012-06-06 16 views
8

getResourceAsStream aracılığıyla bir kavanoz içinde belirli bir dosyanın nasıl yükleneceği ile ilgili bazı yanıtlar gördüm ve bunu yönetebilirim. Ancak, gerçekten spesifik bir şeye bakıyorum ve bu konuda forumda bir cevap bulamadım.Bir kavanoz içinden ResourceBundle ile yükleme

Ben bir kavanoz dosyası 2 özelliklerini içeren messages_en_US.properties ve messages_fr_FR.properties dosyaları bir conf dizini sahip olması: Burada

yapılandırmasıdır. Böyle kaynaklar yüklemek için klasik yolu dosyaları program sınıf yolunda tarafından başvurulan bir dizindeki bu gayet iyi çalışıyor, disk üzerinde olsaydı

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

kullanmaktır. Ancak, ResourceBundle.getBundle'un bir araya getirilmesinin nasıl kullanılacağını ve kaynakların bir kavanozda kullanılmasını nasıl yönetebileceğimi bilmiyorum. Gerçekten de, aracılığıyla bir köprüyü göremediğim için getResourceAsStream (ya da bu, tüm yerel dosya adını tam olarak belirtmek için yerel olarak yönetme anlamına gelir).

Herkes yardımcı olabilir mi?

Teşekkürler.

+0

:

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

bu dosyayı okumak için kavanozda? Bir JAR içinde kalırsa, sınıf yoluna sahip olmanız ve normalde ResourceBundle.getBundle – rascio

+0

ile aynı sorunu yüklememem gerektiği anlamına gelir, ben de bir jar dosyası içinde bir özellik kaynağım var ama bu jar dosyası Sınıf içi programlarda DEĞİL.PropertyResourceBundle için javadoc'u okudum ve bunu inputstream ile yapabileceğimi biliyorum, ancak inputstream IO dosyasını her seferinde okuyacaktır ve varsayılan ResourceBundle önbelleğe alma işlemini kaybeder. Paketi, sınıf yolunun dışındaki bir kaynaktan almak için ResourceBundle sınıfını yönetmenin bir yolu var mı? –

+0

Ayrıca ResourceBundle.Control, özelleştirme için uygulanabilir, ancak özellik dosyalarını sınıf yoluna yerleştirmenin yollarını bulmak için daha iyi bir overkill gibi görünüyor. –

cevap

1

Bunu denediniz mi? o kavanozun içinde bir conf dizininde varsa

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

, o zaman yüklemeye çalışıyorsanız paketin paket conf olur ve kullanması gereken

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

The javadoc diyor ki:

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

3+ saat ve sonunda bu cevap hayatımı kurtardı. +1 – xyz

+0

JAR dosyası, sınıf yolunda olması gerektiği anlamına gelmez. Özgün yazarın, sınıf yolunun dışında bir kaynak kümesine nasıl erişileceğini anlatmaya çalıştığını düşünüyorum. PropertyStreamBundle'ı InputStream ile kullanmak bir yoldur, ancak önbelleğe almayı kaybedersiniz ve her defasında yeni bir Bundle yapmanız gerekir. Aynı sorunu yaşıyorum, sınıf yolunda olmayan bir kaynağım var. –

0

ResourceBundle her zaman bir özellik dosyası arar, bu nedenle, aşağıdakileri çalıştırırsanız:

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

ResourceBundle, sınıf yolunuzdaki "messages.properties" öğesini arayacaktır.

0

Dosya message.properties varsayarsak, bunu kullanmak istediğiniz projenin sınıf yolunda olan bazı xyz.jar dosyasının bir parçasıdır. kavanozun içinde bu dosyanın Ambalaj aşağıdaki gibidir:

import java.util.ResourceBundle; 

....

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

sayesinde bu dosya var mı

İlgili konular