2009-09-26 16 views
50

मुझे एक जावा प्रोग्राम चाहिए जो वर्तमान निर्देशिका से उपयोगकर्ता निर्दिष्ट फ़ाइल नाम पढ़ता है (वही निर्देशिका जहां .class फ़ाइल चलती है)।जावा, वर्तमान निर्देशिका से एक फाइल पढ़ रहे हैं?

दूसरे शब्दों में, उपयोगकर्ता फ़ाइल नाम निर्दिष्ट करता है "MyFile.txt" होने के लिए, और है कि फ़ाइल वर्तमान निर्देशिका में पहले से ही है यदि:

reader = new BufferedReader(new FileReader("myFile.txt")); 

काम नहीं करता। क्यूं कर?

मैं इसे विंडोज़ में चला रहा हूं।

+1

यह वही है लिनक्स में भी –

उत्तर

37

वर्तमान निर्देशिका (आवश्यक) निर्देशिका है .class फ़ाइल में है। यह प्रक्रिया की कार्यशील निर्देशिका है। (यानी: जिस निर्देशिका में आप JVM प्रारंभ करते थे, उसमें निर्देशिका)

आप getResourceAsStream() के साथ .class फ़ाइल के समान निर्देशिका से फ़ाइलें लोड कर सकते हैं। इससे आपको एक इनपुटस्ट्रीम मिलेगा जिसे आप InputStreamReader के साथ रीडर में परिवर्तित कर सकते हैं।

+12

+1। यदि आप ग्रहण या आइडिया जैसे आईडीई चला रहे हैं, तो वर्तमान निर्देशिका प्रोजेक्ट निर्देशिका होगी, संकलक आउटपुट नहीं। –

+1

@piiligrim, आपके लॉन्च कॉन्फ़िगरेशन पर निर्भर करता है –

+0

@DenisTulskiy मैं ग्रहण पर काम कर रहा हूं जैसा कि उदाहरण व्यक्ति ने किया था। मेरा अभी भी काम नहीं कर रहा है, वह क्यों है? – windsound

58

System.getProperty("user.dir") 

यह वर्तमान कार्यशील निर्देशिका रिटर्न की कोशिश करो।

+3

लेकिन यह परियोजना की मूल निर्देशिका तक केवल पथ लौटाता है। हम जावा –

+0

की मुख्य विधि में वर्तमान पैकेज का मार्ग कैसे प्राप्त कर सकते हैं यह बहुत उपयोगी है। धन्यवाद :) – whitehat

4

यदि आप जानते हैं कि आपकी फाइलें आपकी कक्षाएं कहाँ रहेंगी, तो वह निर्देशिका आपके क्लासपाथ पर होगी। उस स्थिति में, आप यह सुनिश्चित कर सकते हैं कि यह समाधान आपकी समस्या का समाधान करेगा:

URL path = ClassLoader.getSystemResource("myFile.txt"); 
if(path==null) { 
    //The file was not found, insert error handling here 
} 
File f = new File(path.toURI()); 

reader = new BufferedReader(new FileReader(f)); 
21

उपर्युक्त उत्तर में से कोई भी मेरे लिए काम नहीं करता है। यहां मेरे लिए क्या काम करता है।

URL path = Foo.class.getResource("myFile.txt"); 
File f = new File(path.getFile()); 
reader = new BufferedReader(new FileReader(f)); 
-3

यह भी काम करता है:

Path file=Paths.get("Your file path"); 
InputStream is=Files.newInputStream(file); 
BufferedReader br=new BufferedReader(new InputStreamReader(is)); 

मान लें कि आपका वर्ग के नाम Foo.java, Foo.java को उसी फ़ोल्डर में MyFile.txt तक पहुंच भी इस कोड का उपयोग करने के लिए है चलो

4

आपकी प्रोजेक्ट में फ़ाइलें आपके src फ़ोल्डर के सापेक्ष आपके लिए उपलब्ध हैं। यदि आप जानते हैं जो पैकेज या फ़ोल्डर myfile.txt में होगा, कहते हैं कि यह

----src 
--------package1 
------------myfile.txt 
------------Prog.java 

में आप Prog.java से "src/package1/myfile.txt" के रूप में अपने रास्ते निर्दिष्ट कर सकते हैं

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