संक्षिप्त उत्तर: नहीं।
लंबा उत्तर: वास्तव में नहीं। यदि आप जानते हैं कि जिस पाठ को आप सीधे डालने वाले टेक्स्ट को प्रतिस्थापित कर रहे हैं, तो आप फ़ाइल के हिस्से की तलाश करके, एक छोटा ब्लॉक पढ़कर, नए टेक्स्ट को प्रतिस्थापित करने और उस ब्लॉक को प्रतिस्थापित करके प्रतिस्थापन कर सकते हैं। यह आपके आयु प्रतिस्थापन उदाहरण के लिए काम करेगा, लेकिन उदाहरण के लिए, यदि आप 9 के साथ 9 या 99 के साथ 99 को प्रतिस्थापित कर रहे हैं, तो नहीं।
हालांकि, वहाँ अन्य कठिनाइयों कर रहे हैं:
आप चर लंबाई लाइनों हो सकता है, तो आप जहां के लिए तलाश करने के लिए पता नहीं है। आपको तब तक फ़ाइल को तब तक पढ़ना होगा जब तक आप प्रतिस्थापन करते हैं, भले ही आप इसे एक समय में ब्लॉक करते हैं और अवांछित लोगों को त्याग देते हैं।
आपके पास यूटीएफ -8 जैसे बहु-बाइट चरित्र सेटों के साथ एक और जटिलता है। आपका इंगोइंग टेक्स्ट आपके आउटगोइंग टेक्स्ट के समान लंबाई के रूप में प्रदर्शित हो सकता है, लेकिन प्रतिस्थापन के आधार पर छोटा या लंबा हो सकता है।
e
(यू +0065) कोड एक बाइट के रूप में, लेकिन é
(U + 00E9) कोड दो के रूप में कोड।
लेकिन, यदि आप केवल एक कम स्मृति गहन विधि की तलाश में हैं, तो आप एक समय में एक फ़ाइल को एक पंक्ति पढ़ सकते हैं, और प्रत्येक पंक्ति को एक नई फ़ाइल में लिखते समय लिखते हैं। जब आप पूरा कर लें, तो पुरानी फ़ाइल हटाएं और नया नाम बदलें। यह धीमा हो सकता है, इसलिए बफरिंग, 20 लाइनों (या 100, या 1000, या जो कुछ भी आप चुनते हैं ..) को पढ़ते हैं और लिखते हैं, प्रदर्शन में सुधार करेंगे।
स्रोत
2015-06-03 22:25:09
https://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html –
1 * लाइन * को बदलना संभव नहीं है: आप केवल बाइट्स को ओवरराइट कर सकते हैं जो पहले से ही हैं वहां (या फ़ाइल के अंत में अधिक बाइट्स जोड़ें)। आप उस लाइन को किसी अन्य बाइट्स में फिट करने के लिए बदल सकते हैं, आप बस लाइन को नहीं हटा सकते हैं, इसकी लंबाई बदल सकते हैं। –
यदि आप जानते हैं कि आप क्या कर रहे हैं तो यादृच्छिक एक्सेस मोड का उपयोग करना संभव है। लेकिन यदि आप करते हैं, तो यह शायद ही कभी प्रयास (और जोखिम) के लायक है। –