जावा फ़ाइल में किसी भी स्थान पर डेटा को पढ़ने और लिखने की अनुमति देने के लिए RandomAccessFile क्लास प्रदान करता है। आपके द्वारा अब तक उपयोग की गई सभी स्ट्रीम को केवल पढ़ने के लिए या केवल लिखने के लिए स्ट्रीम के रूप में जाना जाता है। इन धाराओं को अनुक्रमिक धाराएं कहा जाता है। एक फ़ाइल जो अनुक्रमिक स्ट्रीम का उपयोग करके खोली जाती है उसे अनुक्रमिक-पहुँच फ़ाइल कहा जाता है। अनुक्रमिक-पहुंच फ़ाइल की सामग्री को अद्यतन नहीं किया जा सकता है। हालाँकि, फ़ाइलों को संशोधित करना अक्सर आवश्यक होता है। जावा फ़ाइल में किसी भी स्थान पर डेटा को पढ़ने और लिखने की अनुमति देने के लिए RandomAccessFile क्लास प्रदान करता है। एक फ़ाइल जो RandomAccessFile वर्ग का उपयोग करके खोली जाती है, उसे रैंडम-एक्सेस फ़ाइल के रूप में जाना जाता है।
RandomAccessFile वर्ग DataInput और DataOutput इंटरफेस को लागू करता है, जैसा कि नीचे चित्र में दिखाया गया है। DataInput इंटरफ़ेस आदिम-प्रकार के मानों और स्ट्रिंग्स को पढ़ने के तरीकों को परिभाषित करता है (उदाहरण के लिए, readInt, readDouble, readChar, readBoolean, readUTF) और DataOutput इंटरफ़ेस आदिम-प्रकार के मान और स्ट्रिंग लिखने के तरीकों को परिभाषित करता है (उदाहरण के लिए, writeInt, writeDouble, writeChar, writeBoolean, writeUTF).
RandomAccessFile बनाते समय, आप दो मोड में से एक निर्दिष्ट कर सकते हैं: r या rw। मोड r का अर्थ है कि स्ट्रीम केवल पढ़ने के लिए है, और मोड rw इंगित करता है कि स्ट्रीम पढ़ने और लिखने दोनों की अनुमति देती है। उदाहरण के लिए, निम्नलिखित कथन एक नई स्ट्रीम बनाता है, raf, जो प्रोग्राम को फ़ाइल से पढ़ने और लिखने की अनुमति देता है test.dat:
RandomAccessFile raf = new RandomAccessFile('test.dat', 'rw');
यदि test.dat पहले से मौजूद है, तो इसे एक्सेस करने के लिए raf बनाया जाता है; यदि test.dat मौजूद नहीं है, तो test.dat नामक एक नई फ़ाइल बनाई जाती है, और नई फ़ाइल तक पहुंचने के लिए raf बनाई जाती है। विधि raf.length() किसी भी समय test.dat में बाइट्स की संख्या लौटाती है। यदि आप फ़ाइल में नया डेटा जोड़ते हैं, तो raf.length() बढ़ जाता है।
यदि फ़ाइल को संशोधित करने का इरादा नहीं है, तो इसे r मोड से खोलें। यह फ़ाइल के अनजाने संशोधन को रोकता है।
एक रैंडम-एक्सेस फ़ाइल में बाइट्स का एक क्रम होता है। एक विशेष मार्कर जिसे फ़ाइल पॉइंटर कहा जाता है, इन बाइट्स में से एक पर स्थित होता है। पढ़ने या लिखने का कार्य फ़ाइल पॉइंटर के स्थान पर होता है। जब कोई फ़ाइल खोली जाती है, तो फ़ाइल पॉइंटर फ़ाइल की शुरुआत में सेट होता है। जब आप फ़ाइल में डेटा पढ़ते या लिखते हैं, तो फ़ाइल पॉइंटर अगले डेटा आइटम पर आगे बढ़ता है। उदाहरण के लिए, यदि आप readInt() का उपयोग करके int मान पढ़ते हैं, तो JVM फ़ाइल पॉइंटर से 4 बाइट्स पढ़ता है, और अब फ़ाइल पॉइंटर 4 पिछले स्थान से आगे बाइट्स, जैसा कि नीचे चित्र में दिखाया गया है।
एक RandomAccessFile raf के लिए, आप फ़ाइल पॉइंटर को एक निर्दिष्ट स्थान पर ले जाने के लिए raf.seek(position) विधि का उपयोग कर सकते हैं। raf.seek(0) इसे फ़ाइल की शुरुआत में ले जाता है, और raf.seek(raf.length()) इसे फ़ाइल के अंत में ले जाता है। नीचे दिया गया कोड RandomAccessFile दर्शाता है।
package demo; import java.io.*; public class TestRandomAccessFile { public static void main(String[] args) throws IOException { try( // Create a random access file RandomAccessFile inout = new RandomAccessFile("inout.dat", "rw"); ) { // Clear the file to destroy the old contents if exists inout.setLength(0); // Write new integers to the file for(int i = 0; iवर्तमान फ़ाइल की लंबाई 800 है
पहला नंबर 0 है
दूसरा नंबर 1 है
दसवीं संख्या 9 है
नई लंबाई 804 है
ग्यारहवीं संख्या 555 हैएक RandomAccessFile नामक फ़ाइल के लिए inout.dat मोड के साथ बनाया गया है rw ताकि लाइन 8 में पढ़ने और लिखने दोनों कार्यों की अनुमति मिल सके।
inout.setLength(0) पंक्ति 11 में लंबाई को 0 पर सेट करता है। यह, वास्तव में, फ़ाइल की पुरानी सामग्री को नष्ट कर देता है।
for लूप पंक्ति 14 और 15 में फ़ाइल में 0 से 199 तक 200 int मान लिखता है। चूंकि प्रत्येक int मान 4 बाइट्स लेता है, inout.length() से लौटाई गई फ़ाइल की कुल लंबाई अब 800 है (पंक्ति 18), जैसा कि नमूना आउटपुट में दिखाया गया है।
पंक्ति 21 में inout.seek(0) को आमंत्रित करने से फ़ाइल पॉइंटर फ़ाइल की शुरुआत में सेट हो जाता है। inout.readInt() पंक्ति 22 में पहला मान पढ़ता है और फ़ाइल पॉइंटर को अगले नंबर पर ले जाता है। दूसरा नंबर पंक्ति 26 में पढ़ा जाता है।
inout.seek(9 * 4) (पंक्ति 29) फ़ाइल पॉइंटर को दसवें नंबर पर ले जाता है। inout.readInt() दसवां नंबर पढ़ता है और फ़ाइल पॉइंटर को पंक्ति 30 में ग्यारहवें नंबर पर ले जाता है। inout.write(555) वर्तमान स्थिति में एक नया ग्यारहवां नंबर लिखता है ( पंक्ति 33). पिछला ग्यारहवाँ अंक नष्ट हो गया है।
inout.seek(inout.length()) फ़ाइल पॉइंटर को फ़ाइल के अंत में ले जाता है (पंक्ति 36)। inout.writeInt(999) फ़ाइल में एक 999 लिखता है (पंक्ति 37)। अब फ़ाइल की लंबाई 4 बढ़ गई है, इसलिए inout.length() रिटर्न 804 (पंक्ति 40)।
inout.seek(10 * 4) फ़ाइल पॉइंटर को लाइन 43 में ग्यारहवें नंबर पर ले जाता है। नया ग्यारहवां नंबर, 555, लाइन 44 में प्रदर्शित होता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3