2009-04-09 8 views
31

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

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

क्या वसंत में इसके साथ मदद करने के लिए कुछ भी है? मैं प्रलेखन के माध्यम से किया गया है लेकिन मुझ पर कुछ भी कूद नहीं रहा है।

यहां मैं किस प्रकार का हूं .. लेकिन मैं इसे फ़ाइल या शायद क्लासपाथ को पहचानने के लिए नहीं प्राप्त कर सकता ... असली यकीन नहीं है कि एप्लिकेशन कॉन्टेक्स्ट में कुछ परिभाषित करने की आवश्यकता है?

यहां कुछ प्रयास हैं जो काम नहीं कर रहे हैं ... दोनों वसंत 'और सिर्फ जावा'।

reader = new BufferedReader(new InputStreamReader(new ClassPathResource("com.company.app.dao.sql.SqlQueryFile.sql").getInputStream()) 

reader = new BufferedReader(new InputStreamReader(ClassLoader.getSystemResourceAsStream("com.company.app.dao.sql.SqlQueryFile.sql"))); 

कोई विचार?

उत्तर

34

वसंत को इंजेक्ट करने का प्रयास करें, मान लीजिए कि आप वसंत का उपयोग निर्भरता-इंजेक्शन ढांचे के रूप में कर रहे हैं।

अपनी कक्षा में, करते कुछ इस तरह:

public void setSqlResource(Resource sqlResource) { 
    this.sqlResource = sqlResource; 
} 

और एक संपत्ति तो आपके आवेदन संदर्भ फ़ाइल में, सेम परिभाषा, बस सेट:

<bean id="someBean" class="..."> 
    <property name="sqlResource" value="classpath:com/somecompany/sql/sql.txt" /> 
</bean> 

और स्प्रिंग चालाक होना चाहिए क्लासपाथ से फ़ाइल को लोड करने के लिए पर्याप्त है और इसे संसाधन के रूप में अपने बीन को दें।

आप PropertyPlaceholderConfigurer पर भी देख सकते हैं, और अपने सभी एसक्यूएल को संपत्ति फ़ाइलों में स्टोर कर सकते हैं और जहां आवश्यक हो वहां प्रत्येक को अलग से इंजेक्ट कर सकते हैं। बहुत सारे विकल्प हैं।

+1

धन्यवाद, यह वही है जो मैं बाद में था। मैं वसंत के लिए बिल्कुल नया हूं और यह अच्छी तरह से काम करता प्रतीत होता है। दुर्भाग्य से मेरे पास वसंत मंच पर पोस्ट किया गया वही प्रश्न था और मुझे कोई प्रतिक्रिया नहीं मिली ... स्टैकओवरफ़ो को +1। –

+0

अच्छा जवाब! क्या वह संसाधन org.springframework.core.io.Resource है? – fastcodejava

39

बदलें।/पथ विभाजक के रूप में और getResourceAsStream उपयोग करने के लिए:

reader = new BufferedReader(new InputStreamReader(
    getClass().getClassLoader().getResourceAsStream(
     "com/company/app/dao/sql/SqlQueryFile.sql"))); 

या

reader = new BufferedReader(new InputStreamReader(
    getClass().getResourceAsStream(
     "/com/company/app/dao/sql/SqlQueryFile.sql"))); 

नोट अग्रणी स्लैश जब बनाम ClassLoader.getResourceAsStreamClass.getResourceAsStream() का उपयोग कर। getSystemResourceAsStreamसिस्टम क्लासलोडर का उपयोग करता है जो आप नहीं चाहते हैं।

मुझे संदेह है कि बिंदुओं के बजाय स्लैश का उपयोग ClassPathResource के लिए भी काम करेगा।

+0

अग्रणी/सावधान रहें। यदि उपरोक्त कोड पैकेज com.company.app.dao.sql में किसी वर्ग से एक्सेस किया गया है, तो आप वास्तव में बस SqlQueryFile.sql चाहते हैं। यदि कोड को किसी अन्य पैकेज से एक्सेस किया गया है, तो आपको एक अग्रणी/ –

+0

की आवश्यकता है, एक सेकंड प्रतीक्षा करें - आप वास्तव में getClass() प्राप्त करें। GetClassLoader()। GetResourceAsStream() - यह गैर-स्थिर –

+0

है, मैंने नोटिस किया है कि आपको getClass() की आवश्यकता है लेकिन किसी कारण से यह काम नहीं किया। मुझे यकीन है कि यह वास्तव में करीब है। ऐसा लगता है कि यह काम करना चाहिए। मुझे प्राप्त वसंत उत्तर वह है जो मैं कर रहा हूं इसलिए मैं अब इस का पीछा नहीं कर रहा हूं। मदद के लिए सभी का धन्यवाद! –

0
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 

public class readFile { 
    /** 
    * feel free to make any modification I have have been here so I feel you 
    * 
    * @param args 
    * @throws InterruptedException 
    */ 
    public static void main(String[] args) throws InterruptedException { 
     File dir = new File(".");// read file from same directory as source // 
     if (dir.isDirectory()) { 
      File[] files = dir.listFiles(); 
      for (File file : files) { 
       // if you wanna read file name with txt files 
       if (file.getName().contains("txt")) { 
        System.out.println(file.getName()); 
       } 

       // if you want to open text file and read each line then 
       if (file.getName().contains("txt")) { 
        try { 
         // FileReader reads text files in the default encoding. 
         FileReader fileReader = new FileReader(
           file.getAbsolutePath()); 
         // Always wrap FileReader in BufferedReader. 
         BufferedReader bufferedReader = new BufferedReader(
           fileReader); 
         String line; 
         // get file details and get info you need. 
         while ((line = bufferedReader.readLine()) != null) { 
          System.out.println(line); 
          // here you can say... 
          // System.out.println(line.substring(0, 10)); this 
          // prints from 0 to 10 indext 
         } 
        } catch (FileNotFoundException ex) { 
         System.out.println("Unable to open file '" 
           + file.getName() + "'"); 
        } catch (IOException ex) { 
         System.out.println("Error reading file '" 
           + file.getName() + "'"); 
         // Or we could just do this: 
         ex.printStackTrace(); 
        } 
       } 
      } 
     } 

    }`enter code here` 

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