2010-03-16 8 views
8

मेरे पास .war फ़ाइल की जड़ में एक jsp फ़ाइल है। और उसके बाद मेरे पास STUFF नामक एक फ़ोल्डर है।सर्वलेट (वेब ​​ऐप) में मैं सापेक्ष पथ कैसे जानूं?

मैं STUFF के अंदर फ़ाइल read.txt तक पहुंच कैसे प्राप्त करूं?

/Name_of_war/STUFF/read.txt सही पथ है?

उत्तर

23

वेबपैप-सापेक्ष पथ /STUFF/read.txt है।

ServletContext#getRealPath() का उपयोग एक सापेक्ष वेब पथ को एक पूर्ण स्थानीय डिस्क फ़ाइल सिस्टम पथ में बदलने के लिए कर सकता है। इस तरह आप इसे सामान्य java.io सामानों में आगे का उपयोग कर सकते हैं जो वास्तव में वेब संदर्भ के बारे में कुछ भी नहीं जानता है।

String relativeWebPath = "/STUFF/read.txt"; 
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath); 
File file = new File(absoluteDiskPath); 
// Do your thing with File. 

हालांकि यह सर्वर पर डिस्क की बजाय स्मृति में WAR का विस्तार करने के लिए कॉन्फ़िगर किया गया है, हालांकि यह काम नहीं करता है। getRealPath() का उपयोग करना हमेशा यह चेतावनी है और असली दुनिया के अनुप्रयोगों में इसकी अनुशंसा नहीं की जाती है। यदि आप केवल इतना अंततः की जरूरत है बस उस फ़ाइल है, जिसके लिए आप की संभावना FileInputStream इस्तेमाल किया है | के InputStream हो रही है, तो आप बेहतर ServletContext#getResourceAsStream() प्रयोग करेंगे InputStream के रूप में सीधे इसे पाने के लिए:

String relativeWebPath = "/STUFF/read.txt"; 
InputStream input = getServletContext().getResourceAsStream(relativeWebPath); 
// Do your thing with InputStream. 
+2

मैंने कोशिश की और कोशिश कर एक दिन बर्बाद कर दिया .. 'FileNotFoundException' का सामना करना पड़ा और यह स्थानीय में काम कर रहा है लेकिन वेब में नहीं। निराश हो गया .. लेकिन आखिरकार मैं आपके जवाब में आया और कोशिश की .. यह बहुत अच्छा काम करता है .. बहुत बहुत धन्यवाद .. :) –

1

यह classpath में स्थित है, तो , या आप क्लासपाथ में फ़ोल्डर जोड़ सकते हैं, कैसे: क्लासलोडर क्लासलोडर = थ्रेड.current थ्रेड()। getContextClassLoader(); इनपुटस्ट्रीम इनपुट = classLoader.getResourceAsStream (फ़ाइल नाम);

संबंधित मुद्दे