2010-06-23 21 views
30

, ana yönteminde aşağıdaki kodu vardır:Maven projesinde kaynak dosyalarının yolu nedir? Benim Maven projede

FileInputStream in = new FileInputStream("database.properties"); 

ama her zaman bulunamadı hatası bir dosya olsun.

Dosyayı src/main/resources dizinine koydum ve hedef/sınıf dizinine düzgün bir şekilde kopyaladım (Maven kaynaklarının beklenen davranışı olduğuna inanıyorum) ama aslında programı çalıştırırken bu asla bulamıyor gibi görünüyor dosya. Diğer yolları denedim:

FileInputStream in = new FileInputStream("./database.properties"); 
FileInputStream in = new FileInputStream("resources/database.properties"); 

vb. Hiçbir şey işe yaramıyor gibi görünüyor.

Kullanılacak uygun yol nedir? dayanarak


"disown yönettiği" Burada, aşağıda cevap ne gerekli oldu:

TestDB sınıfın adıdır
InputStream in = TestDB.class.getResourceAsStream("/database.properties") 

.

Yardımlarınız için teşekkürler, disown!

cevap

51

Dosyayı doğrudan bu şekilde yükleyemezsiniz, kaynak soyutlamasını kullanmanız gerekir (kaynak yalnızca dosya sisteminde değil, sınıf yolundaki herhangi bir yerde olabilir - bir kavanoz dosyasında veya başka bir şekilde). Bu soyutlama, kaynak yüklerken kullanmanız gereken şey. Kaynak yolları sınıf dosyasının konumuna göredir, yani 'root' almak için bir çizgi prepend gerekir:

InputStream in = getClass().getResourceAsStream("/database.properties"); 
+0

Statik yönteminden dosyaya erişmeye çalışıyorsanız, getClass() çalışmıyor Bu durumda bir alternatif var mı? – acarlow

+4

Sınıf adını kullanın, örneğin Main.class.getResourceAsStream(). Herhangi bir sınıf veya sınıf yükleyiciyi kullanabilirsiniz, böylece hread.getContextClassLoader(). GetResourceAsStream() da çalışır. –