"हाय, अमीगो। काफ़ी समय हो गया, नहीं मिले।"

"हाय, बिलाबो। तुम किस बारे में बात करने जा रहे हो?"

"आज मैं आपको फ़ाइलों के साथ काम करने के बारे में बताने जा रहा हूँ।  जावा में एक विशेष वर्ग (फ़ाइल) है जिसका उपयोग आप हार्ड ड्राइव पर फ़ाइलों को प्रबंधित करने के लिए कर सकते हैं। फ़ाइल सामग्री के प्रबंधन के लिए, अन्य वर्ग हैं: FileInputStream, FileOutputStream, आदि। "

फ़ाइल, फ़ाइलें, पथ - 1

"दिलचस्प। लेकिन जब आप कहते हैं 'फ़ाइलें प्रबंधित करें', तो आपका क्या मतलब है?"

"बस यही अब मैं समझाने जा रहा हूं। फाइलें बनाई जा सकती हैं, हटाई जा सकती हैं, उनका नाम बदला जा सकता है, और भी बहुत कुछ। आप व्यावहारिक रूप से हर वर्ग के लिए फाइल ऑब्जेक्ट पास कर सकते हैं जो फ़ाइल की सामग्री (पढ़ता है, लिखता है, बदलता है) के साथ काम करता है। । उदाहरण के लिए:"

आप फ़ाइल का नाम सीधे FileInputStream में पास कर सकते हैं
FileInputStream input = new FileInputStream("c:/path/a.txt");
या आप एक फ़ाइल ऑब्जेक्ट अलग से बना सकते हैं, और फिर इसे FileInputStrea को पास कर सकते हैं
File file = new File("c:/path/a.txt");
FileInputStream input = new FileInputStream(file);

"लेकिन दूसरा विकल्प लंबा है। मुझे अभी भी समझ नहीं आया कि हमें इन फाइल ऑब्जेक्ट्स की आवश्यकता क्यों है।"

"इस विशिष्ट उदाहरण के लिए, आप सही हैं।" यह उदाहरण नहीं है कि आपको इसे कैसे करना है, बल्कि आप इसे कैसे कर सकते हैं।
लेकिन कल्पना कीजिए कि आपको किसी विशिष्ट निर्देशिका में स्थित सभी फाइलों की एक सूची प्रदर्शित करने की आवश्यकता है। फ़ाइल ऑब्जेक्ट्स का उपयोग करके यह कैसे किया जा सकता है:"

कोड
File folder = new File("c:/path/");
for (File file : folder.listFiles())
{
 System.out.println(file.getName());
}

"क्या सूचीफाइल () एक विधि है जो «सी:/पथ /» द्वारा इंगित फ़ोल्डर में फ़ाइलों की सूची लौटाती है?

"हाँ। लेकिन प्रोग्रामर आमतौर पर 'निर्देशिका' कहते हैं। 'फ़ोल्डर' शब्द अपेक्षाकृत हाल ही में उपयोग में आया, लेकिन सिद्धांत रूप में, दोनों शब्द सही हैं और आप जो चाहें कह सकते हैं।"

"ठीक है। और गेटनेम () क्या करता है? फ़ाइल का नाम वापस करें? नाम में वास्तव में क्या शामिल है? पथ सहित पूरा नाम, या केवल फ़ाइल का नाम?"

"केवल फ़ाइल का ही नाम। पूर्ण पथ के लिए, file.getAbsolutePath() है।"

"तो फाइल क्लास के पास और कौन से तरीके हैं?"

"इस पर एक नज़र डालें:"

तरीका विवरण
boolean isDirectory() क्या फ़ाइल ऑब्जेक्ट एक निर्देशिका है?
boolean isFile() क्या वस्तु एक फाइल है?
long length() फ़ाइल का आकार/लंबाई बाइट्स में लौटाता है।
boolean createNewFile() यदि इस नाम की फ़ाइल अभी तक मौजूद नहीं है, तो एक नई, खाली फ़ाइल बनाता है।
boolean mkdir() डायरेक्टरी बनाता है। «एमकेडीआईआर» नाम «मेक डायरेक्टरी» से आता है।
boolean mkdirs() एक निर्देशिका और उसकी सभी उपनिर्देशिकाएँ बनाता है।
boolean delete() ऑब्जेक्ट से जुड़ी फाइल को डिलीट करता है। यदि वस्तु एक निर्देशिका है, तो निर्देशिका तभी हटाई जाती है जब उसमें कोई फ़ाइल न हो।
void deleteOnExit() फ़ाइल को उन फ़ाइलों की एक विशेष सूची में जोड़ता है जो प्रोग्राम से बाहर निकलने पर स्वचालित रूप से हटा दी जाएंगी।
File createTempFile(
String prefix,
String suffix,
File directory)
बेतरतीब ढंग से उत्पन्न अद्वितीय नाम के साथ एक अस्थायी फ़ाइल बनाता है, जैसे «dasd4d53sd»।
अतिरिक्त पैरामीटर एक नाम उपसर्ग और प्रत्यय हैं। यदि कोई निर्देशिका निर्दिष्ट नहीं है, तो फ़ाइल अस्थायी फ़ाइलों के लिए एक विशेष OS निर्देशिका में बनाई जाती है।
boolean exists() यदि हार्ड ड्राइव पर समान नाम वाली फ़ाइल मौजूद है तो सत्य वापस आ जाता है।
String getAbsolutePath() फ़ाइल का पूरा पथ उसकी सभी उपनिर्देशिकाओं के साथ लौटाता है।
String getCanonicalPath() विहित फ़ाइल पथ देता है।
उदाहरण के लिए, पथ «c:/dir/dir2/../a.txt» को «c:/dir/a.txt» में परिवर्तित करता है
String[] list() वर्तमान ऑब्जेक्ट द्वारा दर्शाई गई निर्देशिका में निहित फ़ाइलों के नामों की एक सरणी देता है।
File[] listFiles() वर्तमान फ़ाइल ऑब्जेक्ट द्वारा दर्शाई गई निर्देशिका में निहित फ़ाइलों की एक सरणी देता है।
long getTotalSpace() उस डिस्क पर कुल स्थान (बाइट्स की संख्या) लौटाता है जिस पर फ़ाइल स्थित है।
long getFreeSpace() उस डिस्क पर मुक्त स्थान (बाइट्स की संख्या) लौटाता है जिस पर फ़ाइल स्थित है।
boolean renameTo(File) फ़ाइल का नाम बदलें, यानी फ़ाइल की सामग्री को वास्तव में एक नया नाम मिलता है। दूसरे शब्दों में, आप फ़ाइल का नाम बदलकर «c:/dir/a.txt» से «d:/out/text/b.doc» कर सकते हैं।
String getName() पथ के बिना केवल फ़ाइल नाम लौटाता है।
String getParent() बिना नाम के केवल वर्तमान फ़ाइल का पथ (निर्देशिका) लौटाता है।
Path toPath() एक पथ ऑब्जेक्ट देता है जो वर्तमान फ़ाइल ऑब्जेक्ट से मेल खाता है।

"वाह! बहुत छोटी सूची नहीं है, हुह? और ऐसा लगता है कि आप इसके साथ काफी कुछ कर सकते हैं: फ़ाइलें बनाएं और हटाएं, उनका नाम बदलें,..."

"तो वर्तमान फ़ाइल की निर्देशिका प्राप्त करने के लिए, मुझे getParent() को कॉल करने की आवश्यकता है?"

"हाँ, लेकिन यह एक स्ट्रिंग देता है - फ़ाइल पथ - फ़ाइल ऑब्जेक्ट नहीं। वास्तव में, फ़ाइल वर्ग लगभग सभी विधियों को डुप्लिकेट करता है: एक संस्करण एक स्ट्रिंग देता है, दूसरा - एक फ़ाइल ऑब्जेक्ट। इसे देखें:"

File file = new File("c:/path/a.txt");
String directory = file.getParent();
File file = new File("c:/path/a.txt");
File directory = file.getParentFile();

यदि आपके पास फ़ाइल पथ के साथ स्ट्रिंग है और आपको फ़ाइल ऑब्जेक्ट की आवश्यकता है, तो कन्स्ट्रक्टर का उपयोग करें। यदि स्थिति उलट जाती है (आपके पास फ़ाइल ऑब्जेक्ट है लेकिन आपको स्ट्रिंग की आवश्यकता है), तो getAbsolutePath () का उपयोग करें। उदाहरण के लिए:"

String path = "c:/a.txt";
File file = new File(path);
File file = new File("c:/a.txt");
String path = file.getAbsolutePath();

"समझ गया।"

"बहुत बढ़िया। तो फिर यहाँ आपके लिए एक छोटा सा कार्य है: वर्तमान फ़ाइल के समान निर्देशिका में स्थित सभी फ़ाइलों के नाम दिखाएं।"

"कुछ भी आसान नहीं हो सकता। यहाँ, देखो:"

कोड
//Some file
File originalFile = new File("c:/path/dir2/a.txt");

//An object representing the directory
File folder = originalFile.getParentFile();

//Print the file list on screen
for (File file : folder.listFiles())
{
 System.out.println(file.getName());
}

"हम्म। सही है।"

"लेकिन यह थोड़ा भ्रमित करने वाला है कि फ़ाइल और निर्देशिका दोनों के लिए एक ही वर्ग - फ़ाइल - का उपयोग किया जाता है। यह मेरे लिए बहुत तार्किक नहीं लगता है।"

"ऐतिहासिक कारणों से इसने इस तरह काम किया। एक निर्देशिका डिस्क पर एक विशेष 'खाली' फ़ाइल हुआ करती थी। बेशक, अब बहुत कुछ बदल गया है, लेकिन सब कुछ नहीं। आज मेरे पास बस इतना ही है।"

"दिलचस्प पाठ के लिए धन्यवाद, बिलाबो।"