Java.io.File में पास () विधि क्यों नहीं है?


123

जबकि java.io.RandomAccessFileएक close()विधि java.io.Fileनहीं है। ऐसा क्यों है? क्या फ़ाइल को अंतिम रूप से बंद कर दिया गया है या कुछ और?

धन्यवाद!


3
यदि आप जावा एपीआई में देखते हैं, तो आप तुरंत उत्तर प्राप्त करने में सक्षम होंगे।
१०:३

43
मैंने सीखा है कि लोग अन्यथा शानदार जावा कल्पना से अधिक सहायक हैं।
Albus Dumbledore

6
बी / इसे खोला ग नहीं किया जा सकता :)
bestsss

6
क्योंकि यह कुछ भी नहीं खोलता है। और लोग आधिकारिक जावा विनिर्देशन की तुलना में काफी कम विश्वसनीय हैं।
लोर्ने की

जवाबों:


141

Fileवर्ग के javadoc के रूप में वर्ग का वर्णन है:

फ़ाइल और निर्देशिका पथनामों का एक सार प्रतिनिधित्व।

Fileकेवल एक pathname का प्रतिनिधित्व है, फाइलसिस्टम (जैसे exists()) और निर्देशिका हैंडलिंग से संबंधित कुछ तरीकों के साथ, लेकिन वास्तविक स्ट्रीमिंग इनपुट और आउटपुट कहीं और किया जाता है। धाराओं को खोला और बंद किया जा सकता है, फाइलें नहीं हो सकतीं।

(मेरी निजी राय है कि यह दुर्भाग्यपूर्ण है कि सूर्य तब बना RandomAccessFile, जिसके असंगत नामकरण से बहुत भ्रम पैदा हुआ।)


72

java.io.Fileएक खुली फ़ाइल का प्रतिनिधित्व नहीं करता है , यह फाइल सिस्टम में एक पथ का प्रतिनिधित्व करता है। इसलिए इस पर closeविधि का कोई मतलब नहीं है।

वास्तव में, यह वर्ग पुस्तकालय के लेखकों द्वारा गलत किया गया था, इसे कुछ ऐसा कहा जाना चाहिए Path


लेकिन फिर सभी निर्देशिका लिस्टिंग के तरीकों के बारे में क्या? उन्हें Pathपूरी तरह से अलग कर दिया जाना चाहिए था ।
biziclop

3
सहमत, लेकिन किसी भी मामले में, फ़ाइल या रैंडमअसेलेफाइल को गलत नाम दिया गया है। RandomAccessFileStream जैसा कुछ बेहतर हो सकता है, लेकिन अब बहुत साल हो गए हैं।
मातरिनस

7
"वास्तव में, यह वर्ग पुस्तकालय के लेखकों द्वारा गलत किया गया था, इसे पथ जैसा कुछ कहा जाना चाहिए" -> उन्होंने आपको सुना। Nio (न्यू I / O) पैकेज में, समान क्लैसे को अब Path नाम दिया गया है। docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html
मिनट

6

रैंडम एक्सेस को प्रबंधित करने के लिए अनिवार्य रूप से रैंडम एक्सेस फाइल इनपुट और आउटपुट स्ट्रीम को लपेटता है। आप कोई फ़ाइल नहीं खोलते और बंद करते हैं, आप किसी फ़ाइल में स्ट्रीम खोलते और बंद करते हैं।


1
हाँ। मैंने java.io.RandomAccessFile में कभी ज्यादा नहीं देखा। मैंने हमेशा इसे java.io.File को ओवररोड किया लेकिन यह नहीं है! फ़ाइल एक पथ का प्रतिनिधित्व करती है। RandomAccessFile एक ऐसी वस्तु है जो डिस्क I / O को स्ट्रीम के रूप में निष्पादित कर सकती है, यद्यपि बहुत अलग कार्यान्वयन के साथ, स्ट्रीम किए गए एक्सेस के बजाय यादृच्छिक को अनुमति देने के लिए।
स्टीव कोहेन

6

एक बफ़ररएडर को खोला और बंद किया जा सकता है लेकिन एक फ़ाइल को कभी नहीं खोला जाता है, यह सिर्फ फाइल सिस्टम में एक पथ का प्रतिनिधित्व करता है।


4

मान लीजिए, आपके पास है

File f  = new File("SomeFile");
f.length();

आपको Fileएस को बंद करने की आवश्यकता नहीं है , क्योंकि इसका सिर्फ एक मार्ग का प्रतिनिधित्व है।

आपको हमेशा केवल पाठक / लेखकों और वास्तव में धाराओं को बंद करने पर विचार करना चाहिए।

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