ऐसा करने का एकमात्र तरीका यह है कि वर्तमान में रास्ते में चलने वाले बाइट्स को चलाना है। इस पर निर्भर करते हुए कि आपको यह कितनी बार करना है, और फ़ाइल कितनी बड़ी है, अक्सर एक नई फ़ाइल बनाने, मौजूदा फ़ाइल की प्रतिलिपि बनाने और रास्ते में नए बाइट डालने का बेहतर विचार होता है।
आप बार बार फ़ाइल अद्यतन करने की आवश्यकता है, या यह छोटा सा है (हो सकता है 100 केबी तक) आप उपयोग कर सकते हैं एक RandomAccessFile:
- फ़ाइल का विस्तार,
setLength()
पद्धति का उपयोग करके, बाइट की संख्या जोड़कर आप length()
विधि द्वारा जो कुछ भी लौटाया गया है उसे डालने वाला होगा।
- यदि आपके पास पर्याप्त मेमोरी है, तो
byte[]
बनाएं जो प्रविष्टि बिंदु से सभी बाइट्स को फ़ाइल के पिछले छोर तक रखेगा।
- कॉल
seek()
सम्मिलन बिंदु
- कॉल
readFully()
पर स्थित करने के लिए अपने अस्थायी सरणी
- कॉल
seek()
को भरने के लिए सम्मिलन बिंदु + बाइट की संख्या में स्थित करने के लिए उस पर अपने बफर लिखने के लिए सम्मिलित करने के लिए
- कॉल
write()
बिंदु
- कॉल
seek()
सम्मिलन बिंदु पर स्थिति बदलने के लिए
- कॉल `लिखने() नई बाइट्स
लिखने के लिए
यदि आप चरण # 2 में एक बड़ी-पर्याप्त सरणी नहीं बना सकते हैं, तो आपको एक छोटे बफर के साथ लूप में चरण 3-6 करना होगा। मैं कम से कम एक 64k बफर दक्षता के लिए उपयोग करेंगे।
http://stackoverflow.com/questions/181408/best-way-to-write-bytes-in-the-middle-of-a-file-in-java – gtgaxiola
पहले से ही प्रयास किया गया है, दुर्भाग्य से मेरा कार्यान्वयन नहीं जोड़ा गया है बाइट्स लेकिन मौजूदा बाइट मिटाएं, वास्तव में डालने के लिए चाल क्या है? –
@gtgaxiola: यह काम नहीं करेगा क्योंकि यह मौजूदा बाइट –