2013-10-24 21 views
5

getResourceAsStream();getResourceAsStream (dosya) dosyayı nerede bulur?

Benim paket yapısı aşağıdaki gibidir:

\src 
|__ net.floodlightcontroller // invoked getResourceAsStream() here 
|__ ... 
|__ resources 
    |__ floodlightdefault.properties //target 
    |__ ... 

Ve floodlightdefault.properties okumak istiyorum. İşte benim kod net.floodlightcontroller pakette yatan geçerli:

package net.floodlightcontroller.core.module; 
// ... 
InputStream is = this.getClass().getClassLoader() 
       .getResourceAsStream("floodlightdefault.properties"); 

Ama is == null alma başarısız oldu. getResourceAsStream(file)file için tam olarak nasıl olduğunu merak ediyorum. Yani belirli PATH s veya siparişi aracılığıyla çalışıyor mu?

Eğer öyleyse, getResourceAsStream() yerlerinin nasıl yapılandırılacağı nasıl görünüyor?

Thx!

+0

Kaynaklar dizinini eklediniz mi? kodunuzu çalıştırırken bir classpath içinde? Genel olarak, getResourceAsStream davranışı ClassLoader uygulamasına bağlıdır. –

+0

Genel olarak konuşursak, bunun ne anlama geldiğine de bağlı olacaktır. – Radiodef

+0

Sıfır sorununuzu düzeltmek için başlangıçta gördüğüm iki şey var. İlk olarak, sadece dizini '' resources/floodlightdefault.properties ''olarak değiştirmeniz gerekiyor. İkincisi, yöntem, derleme dizininizin içindeki kaynağı arıyor olabilir ve gösterdiğiniz dizin yapısı, IDE projesinin kaynak klasörü gibi görünüyor. Tabii ki, projeye kaynak eklediyseniz, IDE dosyaları otomatik olarak derleme dizinine kopyalamalıdır. Netbeans ile yapılan hızlı bir testte, kaynak dosyalarım sadece _both_ build ve src klasöründen kaldırılırsa null olur. – Radiodef

cevap

7

this.getClass().getClassLoader().getResourceAsStream(File) numaralı telefonu aradığınızda, Java, dosyayı this ile belirtilen sınıfla aynı dizinde arar. Yani dosya yapısı ise:

\src 
|__ net.floodlightcontroller.core.module 
    |__ Foo.java 
    |__ floodlightdefault.properties //target 
    |__ ... 

Ve tıpkı çağrı: benzemeye, henüz iyi

InputStream is = Foo.class.getClassLoader() 
      .getResourceAsStream("..\..\..\resources\floodlightdefault.properties"); 

paket yapısını değiştirmek:

\src 
|__ net.floodlightcontroller.core.module 
    |__ Foo.java 
|__ ... 
|__ resources 
    |__ floodlightdefault.properties //target 
    |__ ... 

Ardından aramak isteyeceksiniz arama:

InputStream is = Foo.class.getClassLoader() 
      .getResourceAsStream("floodlightdefault.properties"); 
+0

@Jones Teşekkürler ve 'kaynaklara' sınıf yolunu ekledim, ayrıca çalışıyor. – qweruiop

İlgili konular