2011-08-19 12 views
9

मैं जावा में एक टेक्स्ट फ़ाइल की पहली पंक्ति को खाली करना चाहता हूं। यह फ़ाइल कई गीगाबाइट्स है और मैं एक प्रतिलिपि नहीं करना चाहता हूं। this post से सुझाव का उपयोग करके, मैं RandomAccessFile का उपयोग करके ऐसा करने का प्रयास कर रहा हूं, हालांकि यह बहुत अधिक लिख रहा है।मैं जावा में एक बड़ी फ़ाइल की पहली पंक्ति को कैसे बदल सकता हूं?

यहाँ मेरी कोड है:

RandomAccessFile raInputFile = new RandomAccessFile(inputFile, "rw"); 
origHeaderRow = raInputFile.readLine(); 
raInputFile.seek(0); 
raInputFile.writeChars(Strings.repeat(" ",origHeaderRow.length())); 
raInputFile.close(); 

और अगर आप कुछ नमूना इनपुट और आउटपुट चाहते हैं, यहाँ क्या होता है:

से पहले:

first_name,last_name,age 
Doug,Funny,10 
Skeeter,Valentine,9 
Patti,Mayonnaise,11 
Doug,AlsoFunny,10 

के बाद:

     alentine,9 
Patti,Mayonnaise,11 
Doug,AlsoFunny,10 

इन यह उदाहरण, अधिकांश संपादकों में फ़ाइल 24 रिक्त स्थान के साथ सही ढंग से शुरू होती है, लेकिन 48 वर्ण (न्यूलाइन समेत) को प्रतिस्थापित कर दिया गया है। यहां चिपकने के बाद मैं अजीब प्रश्न चिह्न चीजें देखता हूं। डबल आकार प्रतिस्थापन मुझे कुछ चीज बनाता है जो एन्कोडिंग को गड़बड़ कर रहा है लेकिन मैंने उसी परिणाम के साथ लिखने की कोशिश की।

+2

यय मेरे नाम का उपयोग करने के लिए! –

+0

बस इतना ही पता है, आधुनिक फाइल सिस्टम के साथ "जगह में" फ़ाइल को संपादित करना असंभव है। एक नई प्रति हमेशा बनाई जाती है। – toto2

+0

फ़ाइल में कौन सी एन्कोडिंग है? 1521? UTF8? UCS2? –

उत्तर

8

char जावा में 2 बाइट्स है।

इसके बजाय writeBytes का उपयोग करें।

raInputFile.writeBytes(Strings.repeat(" ",origHeaderRow.length())); 

JavaDoc से आप के लिए वास्तव में क्या देख रहे हैं लग रहा है।

+0

लिखिए बाइट्स एफटीडब्ल्यू! – Zugwalt

5

जैसा कि आप अक्षर लिख रहे हैं (जो जावा में 16-बिट हैं) प्रत्येक वर्ण दो बाइट्स का उपयोग करता है। मेरा सुझाव है कि आप बाइट्स की संख्या लिखने का प्रयास करें, अन्यथा आपकी रिक्त स्थान nul और space बाइट्स में बदल जाएंगी।

संबंधित मुद्दे