"ओह, ऋषि! हाय!"

"हाय, अमीगो! जीवन कैसा है?"

"बहुत बढ़िया। बिलाबो अभी-अभी मुझे फाइल के बारे में बहुत सी दिलचस्प बातें बता रहा है, और इसके साथ कैसे काम करना है।"

"जैसा कि होता है, मुझे लगता है कि मेरे पास इस विषय पर जोड़ने के लिए कुछ है।"

"वास्तव में? तब मैं सब कान हूँ।"

"ठीक है, सुनो। जावा लगातार विकसित हो रहा है। इसके डेवलपर्स लगातार अलग-अलग चीजों को अधिक कुशलता से करने के नए तरीकों की तलाश कर रहे हैं। जावा 7 में, उन्होंने फाइल क्लास के लिए एक विकल्प जोड़ा।"

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

"विकल्प?"

"हां। उन्होंने फाइल क्लास को आधार के रूप में लिया , कुछ नई चीजें जोड़ीं, विधियों का नाम बदला, और फिर इसे दो में विभाजित भी किया। तो अब दो नए वर्ग हैं: पाथ और फाइल्स ।  पाथ वास्तव में फाइल का नया एनालॉग है। वर्ग, और फ़ाइल एक उपयोगिता वर्ग है (सरणी और संग्रह वर्गों के अनुरूप)। फ़ाइल वर्ग के सभी स्थैतिक तरीके वहाँ जाते हैं। इसे इस तरह से करना OOP के संदर्भ में 'अधिक सही' है।

"ठीक है, अगर यह OOP के संदर्भ में है, तो ठीक है। तो क्या बदला?"

"सबसे पहले, उन्होंने उन तरीकों को पुन: पेश नहीं करने का फैसला किया जो  स्ट्रिंग  और फाइल ऑब्जेक्ट्स लौटाते हैं। पथ वर्ग में , सभी विधियां पथ  लौटाती हैं ।

"दूसरा, उन्होंने बहुत सारी स्थिर उपयोगिता विधियों को फाइल क्लास में स्थानांतरित कर दिया।"

"तीसरा, सापेक्ष पथों के साथ काम करना अधिक सुविधाजनक हो गया।"

"यहाँ तरीकों की एक सूची है:"

पथ वर्ग के तरीके विवरण
boolean isAbsolute() यदि पथ निरपेक्ष है तो सत्य लौटाता है।
Path getRoot() वर्तमान पथ की जड़ लौटाता है, अर्थात सर्वोच्च निर्देशिका।
Path getFileName() वर्तमान पथ से फ़ाइल का नाम लौटाता है।
Path getParent() निर्देशिका को वर्तमान पथ से लौटाता है।
boolean startsWith(Path other) जाँचता है कि क्या वर्तमान पथ पारित पथ से शुरू होता है।
boolean endsWith(Path other) जाँचता है कि क्या वर्तमान पथ पारित पथ के साथ समाप्त होता है।
Path normalize() वर्तमान पथ को सामान्य करता है। उदाहरण के लिए, «c:/dir/dir2/../a.txt» को «c:/dir/a.txt» में कनवर्ट करता है
Path relativize(Path other) दो रास्तों के सापेक्ष पथ की गणना करता है, अर्थात «पथों के बीच का अंतर»
Path resolve(String other) वर्तमान और सापेक्ष पथों का उपयोग करके एक निरपेक्ष पथ को हल करता है।
URI toUri() वर्तमान पथ/फ़ाइल होने पर URI लौटाता है।
Path toAbsolutePath() यदि यह सापेक्ष है तो पथ को निरपेक्ष पथ में परिवर्तित करता है।
File toFile() एक फ़ाइल ऑब्जेक्ट लौटाता है जो वर्तमान पथ ऑब्जेक्ट से मेल खाता है।

"और वर्तमान पथ-वह क्या है?"

"यह वह पथ है जो पथ वस्तु के निर्माता को पारित किया गया था जिसके तरीकों को बुलाया जा रहा है।"

"ठीक है। तो फाइल क्लास में क्या तरीके हैं?"

"क्या आप कहीं जाने की जल्दी में हैं? मैं आपको अभी बताता हूँ। यहाँ सबसे महत्वपूर्ण तरीके हैं:"

फ़ाइलें वर्ग के तरीके विवरण
Path createFile(…) डिस्क पर एक फ़ाइल बनाता है।
Path createDirectory(…) डायरेक्टरी बनाता है।
Path createDirectories(…) एक निर्देशिका और उसकी सभी उपनिर्देशिकाएँ बनाता है।
Path createTempFile(…) एक अस्थायी फ़ाइल बनाता है।
Path createTempDirectory(…) एक अस्थायी निर्देशिका बनाता है।
void delete(Path path) एक फ़ाइल हटा देता है।
Path copy(Path source, Path target,…) एक फ़ाइल की प्रतिलिपि बनाता है।
Path move(Path source, Path target,…) एक फ़ाइल ले जाएँ।
boolean isSameFile(Path, Path) दो फाइलों की तुलना करता है।
boolean isDirectory(Path) पथ एक निर्देशिका है?
boolean isRegularFile(Path) क्या पथ एक फाइल है?
long size(Path) फ़ाइल का आकार लौटाता है।
boolean exists(Path) क्या समान नाम वाली कोई वस्तु मौजूद है?
boolean notExists(Path) क्या समान नाम वाली कोई वस्तु मौजूद नहीं है?
long copy(InputStream, OutputStream) InputStream से OutputStream में बाइट कॉपी करता है।
long copy(Path, OutputStream) पथ से आउटपुटस्ट्रीम तक सभी बाइट्स कॉपी करता है।
long copy(InputStream, Path) InputStream के सभी बाइट्स को पाथ में कॉपी करता है।
byte[] read(InputStream, int initialSize) InputStream से बाइट्स की एक सरणी पढ़ता है।
byte[] readAllBytes(Path path) InputStream से सभी बाइट पढ़ता है।
List<String> readAllLines(Path path,..) पाठ फ़ाइल पढ़ता है और तार की एक सूची देता है।
Path write(Path path, byte[] bytes,…) फ़ाइल में बाइट्स की एक सरणी लिखता है।

"कितना दिलचस्प! इतने सारे शानदार समारोह, और सभी एक ही स्थान पर।"

"ठीक है देखो। मान लीजिए कि आप इंटरनेट से एक फ़ाइल डाउनलोड करना चाहते हैं, और फिर इसे किसी को भेजना चाहते हैं। ऐसा करने के लिए, डिस्क पर एक अस्थायी फ़ाइल बनाना और उसमें पढ़े गए डेटा को सहेजना बहुत सुविधाजनक है।"

"क्या इंटरनेट से फ़ाइल डाउनलोड करना मुश्किल है?"

"यह बहुत आसान है। इस उदाहरण को देखें:"

कोड
URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png");
InputStream inputStream = url.openStream();

Path tempFile = Files.createTempFile("temp-",".tmp");
Files.copy(inputStream, tempFile);

"और बस?"

"हाँ, आप क्या देखने की उम्मीद कर रहे थे? केवल 4 पंक्तियाँ हैं।"

" पंक्ति 1.  एक URL ऑब्जेक्ट बनाता है, जिसमें छवि फ़ाइल का URL पास किया जाता है।

" पंक्ति 2.  फ़ाइल पढ़ने के लिए एक धारा (इनपुटस्ट्रीम) url ऑब्जेक्ट पर खुलती है।

" पंक्ति 3।createTempFile एक अस्थायी फ़ाइल बनाने के लिए विधि का उपयोग किया जाता है  ।

" पंक्ति 4.  Files.copy विधि डेटा को से में कॉपी करती है  inputStream । tempFileबस इतना ही।"

"सरल!"

"बहुत बढ़िया। मुझे खुशी है कि आपको यह पसंद आया। मुझे लगता है कि आप बाकी तरीकों का पता खुद लगा सकते हैं। और मैं डिएगो से आपको उनके बारे में कई टास्क देने के लिए कहूँगा।"

"वैसे, यहाँ इस सामग्री पर एक अच्छा लिंक है"