2010-05-07 16 views
9

मुझे अपनी वेबकंटेंट निर्देशिका में फ़ाइल के लिए वास्तविक पथ प्राप्त करने की आवश्यकता है, ताकि मेरे द्वारा उपयोग किए जाने वाले ढांचे को उस फ़ाइल तक पहुंचा जा सके। यह केवल स्ट्रिंग फ़ाइल को विशेषता के रूप में लेता है, इसलिए मुझे इस फ़ाइल के लिए वेबकंटेंट निर्देशिका में वास्तविक पथ प्राप्त करने की आवश्यकता है।मैं अपने वेबकंटेंट फ़ोल्डर में फ़ाइल के लिए असली पथ कैसे प्राप्त कर सकता हूं?

मैं वसंत फ्रेमवर्क का उपयोग करता हूं, इसलिए वसंत में समाधान करना संभव होना चाहिए।

उत्तर

12

यदि आपको सर्वलेट में इसकी आवश्यकता है तो getServletContext().getRealPath("/filepathInContext") का उपयोग करें!

+4

नियंत्रक को ServlexContextAware लागू करें – OrangeDog

+1

ऑरेंजडॉग की टिप्पणी सही है। बस एक त्वरित सुधार, यह ServletContextAware (Servlex नहीं ...) – Felby

0

ऐसी स्थितियों में मुझे संसाधन (MyClass.getClass()। GetResourceAsStream()) के रूप में आवश्यक सामग्री निकालने की इच्छा है, इसे एक अस्थायी स्थान पर फ़ाइल के रूप में लिखें और अन्य फ़ाइल के लिए इस फ़ाइल का उपयोग करें।

इस तरह मुझे जार में केवल उस सामग्री से परेशान नहीं होना चाहिए जो कि वेब कंटेनर के आधार पर कहीं भी स्थित है या मैं वर्तमान में उपयोग कर रहा हूं।

+0

@tangens होगा - मुझे नहीं लगता कि वह webapps classloader से एक संसाधन को पढ़ने के लिए चाहता है है, जैसे एक युद्ध में एक जार में एक फाइल। वह सिर्फ वेब कंटेनर के भीतर फ़ाइल का पथनाम प्राप्त करना चाहता है। –

0

आप स्प्रिंग संसाधन इंटरफेस (और विशेष रूप से ServletContextResource) इस्तेमाल कर सकते हैं कॉल स्प्रिंग तो अनुरोध वस्तु पारित करेंगे आपके ऐप में एक फ़ाइल में, और फिर ऐप के रूट फ़ोल्डर में कुछ फ़ोल्डर्स चला जाता है। कोई सर्वलेट संदर्भ आवश्यक नहीं है! यदि आपके वेब-आईएनएफ फ़ोल्डर में "web.xml" है तो यह काम करना चाहिए। ध्यान दें कि आप इसे पूरी तरह से विकास के लिए उपयोग करने पर विचार करना चाहेंगे, क्योंकि इस प्रकार की कॉन्फ़िगरेशन आमतौर पर ऐप से बाहरी रूप से संग्रहीत होती है। ।

public String getAppPath() 
{ 
    java.net.URL r = this.getClass().getClassLoader().getResource("web.xml"); 
    String filePath = r.getFile(); 
    String result = new File(new File(new File(filePath).getParent()).getParent()).getParent(); 

    if (! filePath.contains("WEB-INF")) 
    { 
     // Assume we need to add the "WebContent" folder if using Jetty. 
     result = FilenameUtils.concat(result, "WebContent"); 
    } 

    return result; 
} 
0

यह दृष्टिकोण संसाधन लोडर का उपयोग करता है निरपेक्ष पथ प्राप्त करने के लिए: जब यह मैप किया विधि

@RequestMapping ..... 
public String myMethod(HttpServletRequest request) { 
    String realPath = request.getRealPath("/somefile.txt"); 
    ... 
12

getServletContext() getRealPath ("") - इस तरह अगर सामग्री एक .war संग्रह से उपलब्ध कराया जा रहा है काम नहीं करेगा। getServletContext() शून्य हो जाएगा।

इस मामले में हम वास्तविक मार्ग प्राप्त करने के लिए एक और तरीका उपयोग कर सकते हैं। इस फाइल को एक गुण के लिए एक रास्ता होने का उदाहरण है C:/कार्यक्रम फ़ाइलें/बिलाव 6/webapps/MyApp/वेब-INF/वर्गों/somefile.properties:

// URL returned "/C:/Program%20Files/Tomcat%206.0/webapps/myapp/WEB-INF/classes/" 
URL r = this.getClass().getResource("/"); 

// path decoded "/C:/Program Files/Tomcat 6.0/webapps/myapp/WEB-INF/classes/" 
String decoded = URLDecoder.decode(r.getFile(), "UTF-8"); 

if (decoded.startsWith("/")) { 
    // path "C:/Program Files/Tomcat 6.0/webapps/myapp/WEB-INF/classes/" 
    decoded = decoded.replaceFirst("/", ""); 
} 
File f = new File(decoded, "somefile.properties"); 
-1

इस का उपयोग करने के लिए जब आप उपयोग करना चाहते कोशिश arff.txt अपने विकास और उत्पादन के स्तर में भी

String path=getServletContext().getRealPath("/WEB-INF/files/arff.txt"); 
+0

होना चाहिए जबकि यह कोड स्निपेट समाधान हो सकता है, [एक स्पष्टीकरण सहित] (// meta.stackexchange.com/questions/114762/explaining-entirely- कोड-आधारित-उत्तर) वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है।याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और वे लोग आपके कोड सुझाव के कारणों को नहीं जानते हैं। – yivi

+0

@yivi मैंने इसे अपडेट किया यदि आपको यह अच्छा वोट मिलता है –

1

आप जावा अपने जावा परियोजना तो में अपने पीसी से पथ को बदलने के लिए बता यदि आप वसंत उपयोग का उपयोग करना चाहिए:

@Autowired 
ServletContext c; 

String UPLOAD_FOLDEdR=c.getRealPath("/images"); 

लेकिन यदि आप सर्वलेट का उपयोग सिर्फ का उपयोग

String UPLOAD_FOLDEdR = ServletContext.getRealPath("/images"); 

तो पथ /webapp/images/ :)

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

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