2013-10-16 5 views
38

मेरे पास निम्न निर्देशिका लेआउट:संसाधन निर्देशिका पथ प्राप्त करने के लिए कैसे प्रोग्राम के रूप में

  • src
    • मुख्य
      • जावा
      • संसाधनों
        • एसक्यूएल (डेटाबेस के लिए स्क्रिप्ट)
        • वसंत (विन्यास)
      • webapp

एक ServletContextListener वर्ग के भीतर, मैं एसक्यूएल निर्देशिका और सूची के अंतर्गत फ़ाइलों तक पहुँचने के लिए चाहते हैं उन्हें। मूल रूप से मेरी समस्या, पथ के साथ है, क्योंकि मुझे पता है कि संक्षेप में एक निर्देशिका के अंतर्गत फ़ाइलें लिस्टिंग है:

File folder = new File(path); 
File[] listOfFiles = folder.listFiles(); 

शायद मैं कोशिश करते हैं और resources/sql

public void contextInitialized(ServletContextEvent event) { 
    event.getServletContext(); //(getRealPath etc.) 
} 
के पथ का निर्माण करने के ServletContextEvent वस्तु इस्तेमाल कर सकते हैं

क्या उस पथ को एक सापेक्ष, गैर-हार्डकोड तरीके से सेट करने के लिए कुछ मौजूद है? कुछ new File("classpath:sql") (अधिमानतः यदि संभव हो तो वसंत) की तरह कुछ या मुझे resources/sql पर इंगित करने के लिए servletContext के साथ क्या करना चाहिए?

उत्तर

28

मुझे लगता है कि src/main/resources/ की सामग्री WEB-INF/classes/ पर आपके .war के निर्माण समय पर कॉपी की गई है। यदि ऐसा है तो आप बस कर सकते हैं (कक्षा नाम के लिए वास्तविक मूल्यों को प्रतिस्थापित कर रहे हैं और पथ लोड किया जा रहा है)।

URL sqlScriptUrl = MyServletContextListener.class 
         .getClassLoader().getResource("sql/script.sql"); 
+0

धन्यवाद !! यह मेरे लिए काम करता है, उस यूआरएल के साथ मैं नई फाइल के लिए पथ बनाता हूं, और आखिर में उस निर्देशिका में फाइलें प्राप्त करता हूं। – whyem

+2

आपको फ़ाइल की आवश्यकता नहीं है। आपके पास पहले से ही एक यूआरएल है। आप यह भी नहीं मान सकते कि एक फाइल या निर्देशिका है। युद्ध को अनपॅक नहीं किया जा सकता है। – EJP

+0

MyServletContextListener का अर्थ यहां क्या है? –

7
import org.springframework.core.io.ClassPathResource; 

... 

File folder = new ClassPathResource("sql").getFile(); 
File[] listOfFiles = folder.listFiles(); 

यह ध्यान देने योग्य है कि यह आपके परिनियोजन विकल्प सीमित कर देगा, ClassPathResource.getFile() तभी काम करता है कंटेनर (अनज़िप) अपने युद्ध फ़ाइल विस्फोट है लायक है।

34

अंत में मैंने यही किया।

private File getFileFromURL() { 
    URL url = this.getClass().getClassLoader().getResource("/sql"); 
    File file = null; 
    try { 
     file = new File(url.toURI()); 
    } catch (URISyntaxException e) { 
     file = new File(url.getPath()); 
    } finally { 
     return file; 
    } 
} 

...

File folder = getFileFromURL(); 
File[] listOfFiles = folder.listFiles(); 
+4

क्या आप पैरामीटर के रूप में '"/sql "' का उपयोग करने के बारे में सुनिश्चित हैं? मुझे शुरुआती स्लैश के साथ समस्या है, इसके बजाय 'sql" 'काम करता है। – Abdull

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

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