दिलचस्प पोस्ट
scanf () बफर में नई लाइन को छोड़ देता है SQL में यादृच्छिक पंक्ति का अनुरोध कैसे करें? पायथन कम्पाइलर त्रुटि, एक्स कोई तर्क नहीं लेता है (1 दिया) एकाधिक जार जोड़ने के लिए क्लासपाथ में वाइल्डकार्ड का उपयोग कैसे करें? -bash: ./manage.py: अनुमति अस्वीकृत Windows 7 पर डिफ़ॉल्ट लायब्रेरी में आर पैकेज को अपडेट करने में असमर्थ उद्देश्य-सी में NSNotificationCenter के माध्यम से संदेश भेजें और प्राप्त करें? एसईएल प्रदर्शन करनेवाला और तर्क एंड्रॉइड: उपयोगकर्ता नाम और पासवर्ड भंडारण? कैसे mysql डेटाबेस का आकार प्राप्त करने के लिए? बास में असीमित परिवर्तनीय असाइनमेंट अनाम पुनरावर्ती PHP फ़ंक्शन पांडा डेटाफ़्रेम: एक कॉलम में तारों से अवांछित भागों को हटा दें मैं कैसे तय कर सकता हूं कि एक विशिष्ट फाइल विंडोज में खुली है या नहीं? पायथन 2. एक्स में रेंज और एक्सरेन्ज फ़ंक्शन के बीच अंतर क्या है?

क्या जावा में एक फ़ाइल की सामग्री को फिर से लिखना सबसे अच्छा तरीका है?

मैं एक फ़ाइल की सामग्री को फिर से लिखना चाहता हूँ

मैंने अभी तक क्या सोचा है यह है:

  1. फ़ाइल का नाम सहेजें
  2. मौजूदा फ़ाइल को हटाएं
  3. एक ही नाम के साथ एक नई खाली फ़ाइल बनाएँ
  4. इच्छित फ़ाइल को खाली फ़ाइल में लिखें

क्या यह सबसे अच्छा तरीका है? या कोई और अधिक सीधा रास्ता है, इसका मतलब है कि फाइलों को हटाने और बनाने की ज़रूरत नहीं है, बल्कि सामग्री को बदलना है?

वेब के समाधान से एकत्रित समाधान "क्या जावा में एक फ़ाइल की सामग्री को फिर से लिखना सबसे अच्छा तरीका है?"

FileOutputStream के साथ फ़ाइल foo.log को अधिलेखित करने के लिए:

File myFoo = new File("foo.log"); FileOutputStream fooStream = new FileOutputStream(myFoo, false); // true to append // false to overwrite. byte[] myBytes = "New Contents\n".getBytes(); fooStream.write(myBytes); fooStream.close(); 

या FileWriter के साथ:

 File myFoo = new File("foo.log"); FileWriter fooWriter = new FileWriter(myFoo, false); // true to append // false to overwrite. fooWriter.write("New Contents\n"); fooWriter.close(); 

मैं इस के लिए अपाचे कॉमन की फाइलयूटी का उपयोग करने के लिए अत्यधिक अनुशंसा करूंगा मुझे यह पैकेज अमूल्य मिल गया है इसका उपयोग करना आसान है और उतना ही महत्वपूर्ण है जब आप बाद में थोड़ी देर बाद वापस पढ़ते / समझते हैं।

 //Create some files here File sourceFile = new File("pathToYourFile"); File fileToCopy = new File("copyPath"); //Sample content org.apache.commons.io.FileUtils.writeStringToFile(sourceFile, "Sample content"); //Now copy from source to copy, the delete source. org.apache.commons.io.FileUtils.copyFile(sourceFile, fileToCopy); org.apache.commons.io.FileUtils.deleteQuietly(sourceFile); 

अधिक जानकारी यहां प्राप्त की जा सकती है: http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html

देखें: java.io.RandomAccessFile

आप एक फाइल पढ़ना-लिखना खोलना चाहेंगे, इसलिए:

 RandomAccessFile raf = new RandomAccessFile("filename.txt", "rw"); String tmp; while (tmp = raf.readLine() != null) { // Store String data } // do some string conversion raf.seek(0); raf.writeChars("newString"); 

जब तक आप अंत में सामग्री जोड़ नहीं रहे हैं, तो ऐसा करना उचित है। अगर आप जोड़ रहे हैं, तो अनुलग्नक निर्माता के साथ FileWriter का प्रयास करें

थोड़ा बेहतर आदेश होगा:

  1. नया फ़ाइल नाम जेनरेट करें (जैसे foo.txt.new)
  2. नवीनीकृत सामग्री को नई फ़ाइल में लिखें
  3. परमाणु का नाम बदलें foo.txt.new से foo.txt तक

दुर्भाग्य से, नाम बदलें परमाणु नाम बदलने के लिए गारंटी नहीं है ।

नीचे दिए गए उदाहरण में, "झूठे" फ़ाइल को ओवरराइट करने का कारण बनता है, सच विपरीत कारण होगा

 File file=new File("C:\Path\to\file.txt"); DataOutputStream outstream= new DataOutputStream(new FileOutputStream(file,false)); String body = "new content"; outstream.write(body.getBytes()); outstream.close(); 

ऐसे समय होते हैं जब कोई भी एक विशाल खाली फाइल रखे, ताकि ओएस के अतिरिक्त लागत को आवश्यक आधार पर आवंटित किया जा सके। यह आम तौर पर डाटाबेस, आभासी मशीनों और बैच प्रोग्राम में भी होता है जो बल्क डेटा की प्रक्रिया और लिखते हैं। इससे आवेदन के प्रदर्शन में काफी सुधार होगा। इन मामलों में, एक नई फाइल लिखना और उसका नाम बदलना वास्तव में मदद नहीं करेगा इसके बजाय, खाली फ़ाइल को भरना होगा। ऐसा तब होता है जब ओवरराइड मोड के लिए जाना चाहिए।

गुवा फ़ाइल। लिखो "एक बाइट सरणी की सामग्री के साथ एक फाइल को ओवरराइट":

 Files.write(bytes, new File(path));