2013-11-22 15 views
28

Özellik dosyasından veri okumak için ReadPropertyUtil.java yardımcı programı oluşturmaya çalışıyorum. Sınıfım bir kullanım dizininin altındayken, skyscrapper.properties dosyam başka bir dizine yerleştirildi.java.util.MissingResourceException: 'name_file name' temel adı için paket bulunamıyor, locale en_US

Ancak, [ResourceBundle][1] kullanarak özelliklere erişmeye çalıştığımda, istisnalar alıyorum, bu paket yüklenemiyor.

Aşağıda, özellikleri nasıl okuduğum ve dizin yapısını gösteren bir resim kodu yer almaktadır.

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

Dizin Yapısı

enter image description here

Bu hat private static ResourceBundle resourceBundle = ResourceBundle.getBundle(FILENAME);

Bunun olmamasının sebebi anlamak için kuramıyorum hata veriyor kel kral ve çözüm nedir. src klasörü yapı yoluna tamamen eklenmiştir.

cevap

29

kaynak için tam adı ile deneyin çalışması gerekir nasıl:

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

Evet! Tam nitelikli isim. Bunu deniyordum ama göreceli yollar ile çalışıyordum. Bu işe yaradı! –

17

ResourceBundle, dosyaları yüklüyor mu? Dosyaları önce bir kaynağa almanız gerekiyor. Eğer yerel özel kodu gerekiyorsa tam o sırada bir FileInputStream içine yükleme hakkında PropertyResourceBundle

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

Veya böyle bir şey

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

sanırım \ lib ... sadece ilk ismini değil, uzatma coz I gerektirir Uzatmadan bahsetmediğim ve sonra da işe yaradığı bir maven projesi örneği var. –

+2

Yine de denemedim, ama çalışıyor gibi görünüyor. Eh, yukarıdaki cevap, tam adı ile adın hile yapar. Ve bakın, uzatma gerekmez. :) –

4

gibi Kaynak Kullanım
ResourceBundle rb = ResourceBundle.getBundle("com//sudeep//internationalization//MyApp",locale); 
or 
ResourceBundle rb = ResourceBundle.getBundle("com.sudeep.internationalization.MyApp",locale); 

Sadece kalifiye yolu verin .. Benim için çalışıyor!

5

Sen benim için düzgün çalışır :)

2
Ben yapı projelerinde Ant kullanarak benim deneyim paylaşmak istiyorum

, * .properties dosyaları açıkça kopyalanmış olmalı, .properties uzantısı olmadan özellik dosya adını belirlesin. Bunun nedeni, Ant'in derleme yapamamasıdır * dosyaları varsayılan olarak derleme çalışma dizinine (javac * .properties) göz ardı eder. Örneğin:

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

'derleme' hedefin altında 'kopya' bölümü, bu yapı çalışma dizine * .properties dosyaları çoğaltmak edeceğini lütfen unutmayın. 'Kopya' bölümü olmadan, jar dosyası özellik dosyalarını içermez, daha sonra java.util.MissingResourceException ile karşılaşabilirsiniz. Eclipse ve Windows ile

1

:

size 2 dosya kopyalamak zorunda - xxxPROJECTxxx.özellikleri - log4j.properties burada: C: \ Eclipse \ CONTENER \ TOMCAT \ apache-tomcat-7 kaynak paketinden erişirken

İlgili konular