2013-10-01 3 views
6

में संसाधन फ़ोल्डर में फ़ाइल प्राप्त करें मैं अपने जावा प्रोजेक्ट में अपने संसाधन फ़ोल्डर में फ़ाइल को पढ़ना चाहता हूं। मैंनेजावा

MyClass.class.getResource("/myFile.xsd").getPath(); 

के लिए निम्न कोड का उपयोग किया और मैं फ़ाइल के पथ को देखना चाहता था। लेकिन यह निम्न पथ

file:/home/malintha/.m2/repository/org/wso2/carbon/automation/org.wso2.carbon.automation.engine/4.2.0-SNAPSHOT/org.wso2.carbon.automation.engine-4.2.0-SNAPSHOT.jar!/myFile.xsd 

मैं Maven भंडार निर्भरता में फ़ाइल पथ मिल देता है और यह फ़ाइल नहीं मिल रहा है। मैं यह कैसे कर सकता हूँ?

उत्तर

4

आपको अपने res फ़ोल्डर का मार्ग देने की आवश्यकता है।

MyClass.class.getResource("/res/path/to/the/file/myFile.xsd").getPath(); 
3

क्या आपकी संसाधन निर्देशिका कक्षा में है?

आप अपने रास्ते में संसाधन निर्देशिका सहित नहीं हैं:

MyClass.class.getResource("/${YOUR_RES_DIR_HERE}/myFile.xsd").getPath(); 
0

यह अन्य Maven मॉड्यूल के संसाधनों का उपयोग करने के लिए संभव नहीं है। तो आपको अपने संसाधन myFile.xsd को अपने src/main/resources या src/test/resources फ़ोल्डर में प्रदान करने की आवश्यकता है।

0

पथ सही है, हालांकि फ़ाइल सिस्टम पर नहीं, बल्कि जार के अंदर। यही कारण है, क्योंकि जार चल रहा था। एक संसाधन कभी फ़ाइल होने की गारंटी नहीं है।

हालांकि यदि आप संसाधनों का उपयोग नहीं करना चाहते हैं, तो आप ज़िप फ़ाइल सिस्टम का उपयोग कर सकते हैं। हालांकि Files.copy जार के बाहर फ़ाइल की प्रतिलिपि बनाने के लिए पर्याप्त होगा। फ़ाइल के अंदर फ़ाइल को संशोधित करना जार एक बुरा विचार है। उपयोगकर्ता के घर (उप-) निर्देशिका (System.getProperty("user.home")) में प्रारंभिक प्रतिलिपि बनाने के लिए संसाधन को "टेम्पलेट" के रूप में बेहतर उपयोग करें।

1

संसाधन फ़ोल्डर से एक फ़ाइल उदाहरण के निर्माण के लिए एक विश्वसनीय तरीका यह एक अस्थायी फ़ाइल में एक धारा के रूप में संसाधन की नकल करने के लिए है (अस्थायी फ़ाइल हटा दी जाएगी जब JVM बाहर निकलता है):

public static File getResourceAsFile(String resourcePath) { 
    try { 
     InputStream in = ClassLoader.getSystemClassLoader().getResourceAsStream(resourcePath); 
     if (in == null) { 
      return null; 
     } 

     File tempFile = File.createTempFile(String.valueOf(in.hashCode()), ".tmp"); 
     tempFile.deleteOnExit(); 

     try (FileOutputStream out = new FileOutputStream(tempFile)) { 
      //copy stream 
      byte[] buffer = new byte[1024]; 
      int bytesRead; 
      while ((bytesRead = in.read(buffer)) != -1) { 
       out.write(buffer, 0, bytesRead); 
      } 
     } 
     return tempFile; 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
}