जावा, वर्तमान निर्देशिका से एक फ़ाइल पढ़ रहा है?


83

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

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

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

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

मैं इसे खिड़कियों में चला रहा हूं।


1
लिनक्स में भी ऐसा ही है
कसुन सियामबलपिटिया

जवाबों:


52

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

आप एक ही निर्देशिका से फ़ाइलें लोड कर सकते हैं * .ResassAsStream () के साथ .class फ़ाइल के रूप में । यह आपको एक InputStream देगा जिसे आप InputStreamReader के साथ एक Reader में बदल सकते हैं ।


* ध्यान दें कि यह "निर्देशिका" वास्तव में एक जार फ़ाइल हो सकती है, जो इस बात पर निर्भर करती है कि कक्षा कहाँ से भरी हुई थी।


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

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

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

79

प्रयत्न

System.getProperty("user.dir")

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


6
लेकिन यह परियोजना के रूट डायरेक्टरी तक केवल रास्ता देता है। हम जावा की मुख्य विधि में वर्तमान पैकेज का मार्ग कैसे प्राप्त कर सकते हैं
तैमूर चांगिज़

35

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

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

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

1
फ़ाइल तक नहीं पहुँच सकते। Path.getFile में NullPointerException देते हैं।
अविक चौधरी

यह मेरे लिए धन्यवाद का काम किया। मेरा सुझाव है कि आप इस तरह का पहला कोड लिखें: URL पथ = JAVA_FILE_NAME.class.getResource ("myFile.txt");
EX1T_ZER0

16

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

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

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


5

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

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));

1

इसे इस्तेमाल करे:

BufferedReader br = new BufferedReader(new FileReader("java_module_name/src/file_name.txt"));

0

"का उपयोग करके देखें।" उदाहरण के लिए

File currentDirectory = new File(".");

इसने मेरे लिए काम किया

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.