2016-03-29 12 views
0

Bunun için pek çok konu olduğunu biliyorum ama her şeyi denedim gibi görünüyor. Ben orada benim dosya adını koyabilirsiniz ve bir src klasörü varsa onu bulurGetResourceAsStream dönen null, dosya var

InputStream is = context.class.getClassLoader().getResourceAsStream("file.props"); 

ama biz bir apache sunucu üzerinde koyduğunuzda, bir src klasör otomatik olarak oluşturulmaz, bu nedenle bulamıyor o. Doğrudan web-inf klasörüne ve

'u yerleştirmeyi denedim ancak bu her zaman boş olarak döndürülür. Bunun nedeni nedir? Dosya var, neden bulamıyor?

+1

[bu] 'yı okuyun (http://stackoverflow.com/questions/676250/different-ways-of-loading-a-file-as-an-inputstream), peki bu zaten açıklanmıştır – Gaurav

+1

Dosya kullanmayın .ayırıcı./Yerine kullanın. –

+2

WEB-INF, web uygulamanızın sınıfında değil. Ancak WEB-INF/sınıfları web uygulamanızın sınıf yolunda. Yani, file.props dosyasını WEB-INF/classes/file.prop dosyasına koyun. – rickz

cevap

1

Yanlış ClassLoader kullanıyorsunuz. context.class.getClassLoader()'u çağırma, ServletContext sınıfının (context.class) yüklendiği ClassLoader sağlar. İstediğiniz, web uygulaması dersleri için ClassLoader, context.getClassLoader() olacaktır.

0

Dosyanızı /WEB-INF'dan yüklemek istiyorsanız ClassLoader'ı kullanmayın. Bunun yerine, sadece bu amaç için ServletContext 'ın yöntemi kullanın: Eğer gerçekten ClassLoader kullanmak istiyorsanız, almak

vb / kullanarak bakılmaksızın OS, dosya sisteminin tamam olduğunu

// In your servlet e.g. doGet method 
ServletContext app = super.getServletContext(); 
InputStream in = app.getResourceAsStream("/WEB-INF/file.props"); 

Not, @ rickz'in tavsiyesi ve file.props'unuzu WEB-INF/classes'a taşıyın.