"हम फ़ाइल इनपुट/आउटपुट के लिए स्ट्रीम के साथ शुरुआत करेंगे। लेकिन पहले चीज़ें पहले।"
फ़ाइलों को पढ़ने और लिखने के लिए दो वर्ग हैं: FileInputStream और FileOutputStream । जैसा कि आप शायद पहले ही अनुमान लगा चुके हैं, FileInputStream अनुक्रमिक रूप से फ़ाइल से बाइट पढ़ सकता है, और FileOutputStream अनुक्रमिक रूप से फ़ाइल में बाइट लिख सकता है। यहाँ वे विधियाँ हैं जो इन वर्गों के पास हैं:
तरीका | विधि क्या करती है |
---|---|
|
- यह कंस्ट्रक्टर है। यह आपको डिस्क पर फ़ाइल का नाम निर्दिष्ट करने देता है, जिससे बनाई गई वस्तु डेटा पढ़ेगी। |
|
- यह विधि फ़ाइल से एक बाइट पढ़ती है और उसे वापस कर देती है। रिटर्न वैल्यू को एक इंट तक चौड़ा किया गया है। |
|
- यह विधि अपठित (उपलब्ध) बाइट्स की संख्या लौटाती है। |
|
- यह विधि धारा को "बंद" करती है। आप इसे तब कहते हैं जब आप स्ट्रीम के साथ काम करना समाप्त कर लेते हैं। ऑब्जेक्ट तब फ़ाइल आदि को बंद करने के लिए आवश्यक हाउसकीपिंग संचालन करता है। इस बिंदु पर, आप स्ट्रीम से और डेटा नहीं पढ़ सकते हैं। |
बस इसके मज़े के लिए, आइए एक फ़ाइल में सभी बाइट्स के योग की गणना करें। यहाँ कोड कैसा दिखता है:
public static void main(String[] args) throws Exception
{
//Create a FileInputStream object bound to «c:/data.txt».
FileInputStream inputStream = new FileInputStream("c:/data.txt");
long sum = 0;
while (inputStream.available() > 0) //as long as there are unread bytes
{
int data = inputStream.read(); //Read the next byte
sum += data; //Add it to the running total
}
inputStream.close(); // Close the stream
System.out.println(sum); // Display the sum on the screen.
}
"हम पहले ही कुछ इस तरह देख चुके हैं। FileOutputStream को कैसे व्यवस्थित किया जाता है?"
"ठीक है। इसे देखो:"
तरीका | विधि क्या करती है |
---|---|
|
"यह कंस्ट्रक्टर है। यह आपको डिस्क पर एक फ़ाइल का नाम निर्दिष्ट करने देता है, जिसके लिए बनाई गई वस्तु डेटा लिखेगी।" |
|
"यह विधि अगली बाइट लिखती है, डेटा को एक बाइट में काटती है।" |
|
"लिखा जाने वाला डेटा अक्सर पहले मेमोरी में बड़े ब्लॉक में एकत्र किया जाता है, और उसके बाद ही डिस्क पर लिखा जाता है।"
फ्लश कमांड सभी सहेजी गई जानकारी को डिस्क पर लिखे जाने के लिए बाध्य करता है। |
|
"यह विधि धारा को "बंद" करती है। जब आप धारा के साथ काम करना समाप्त कर लेते हैं तो आप इसे कहते हैं।" ऑब्जेक्ट तब फ़ाइल को बंद करने के लिए आवश्यक हाउसकीपिंग ऑपरेशन करता है, आदि। |
अब आप स्ट्रीम में डेटा नहीं लिख सकते हैं, और फ़्लश स्वचालित रूप से कॉल किया जाता है।
"इतना ही?"
"हाँ, लिखने के लिए वास्तव में केवल एक ही विधि है: लिखें ()। यह एक समय में केवल एक बाइट लिखता है। लेकिन यह आपको फ़ाइल में जितनी चाहें उतनी जानकारी लिखने देता है।"
प्रोग्रामिंग एक बड़े और जटिल कार्य को कई छोटे कार्यों में विभाजित करने की प्रक्रिया है। अनिवार्य रूप से वही प्रक्रिया यहाँ हो रही है: डेटा के बड़े ब्लॉक को पढ़ने और लिखने को काटने के आकार के टुकड़ों में पढ़ने और लिखने में विभाजित किया जाता है - एक समय में एक बाइट।
डिस्क पर फ़ाइल कॉपी करने के लिए आप इन कक्षाओं का उपयोग कैसे कर सकते हैं:
public static void main(String[] args) throws Exception
{
//Create a stream to read bytes from a file
FileInputStream inputStream = new FileInputStream("c:/data.txt");
//Create a stream to write bytes to a file
FileOutputStream outputStream = new FileOutputStream("c:/result.txt");
while (inputStream.available() > 0) //as long as there are unread bytes
{
int data = inputStream.read(); // Read the next byte into the data variable
outputStream.write(data); // and write it to the second stream
}
inputStream.close(); //Close both streams. We don't need them any more.
outputStream.close();
}
"धन्यवाद, ऋषि। आखिरकार मैं समझ गया कि यह कोड वास्तव में कैसे काम करता है।"
GO TO FULL VERSION