क्या जावा में फ़ाइल में एक लाइन को प्रीपेड करने का कोई तरीका है, अस्थायी फ़ाइल बनाये बिना, और आवश्यक सामग्री लिखना?जावा में फ़ाइल करने के लिए लाइनें तैयार करें
उत्तर
नहीं, जावा में SAFELY करने का कोई तरीका नहीं है।
किसी भी मुख्यधारा के ऑपरेटिंग सिस्टम में कोई फाइल सिस्टम कार्यान्वयन इस तरह की चीज़ का समर्थन नहीं करता है, और आपको यह सुविधा किसी मुख्यधारा प्रोग्रामिंग भाषाओं में समर्थित नहीं मिलेगी।
असली दुनिया फ़ाइल सिस्टम उन डिवाइसों पर लागू किए गए हैं जो डेटा को निश्चित आकार के "ब्लॉक" के रूप में संग्रहीत करते हैं। फ़ाइल सिस्टम मॉडल को कार्यान्वित करना संभव नहीं है, जहां आप फाइल स्थान के बीच में बाइट्स को फ़ाइल I/O को धीमा किए बिना डिस्क स्थान या दोनों को बर्बाद कर सकते हैं।
फ़ाइल के इन-प्लेस रीराइट को शामिल करने वाले समाधान स्वाभाविक रूप से असुरक्षित हैं। यदि आपका आवेदन मारे गए हैं या प्रीपेड/रीराइट प्रक्रिया के बीच में बिजली मर जाती है, तो आप डेटा खोने की संभावना है। मैं अभ्यास में उस दृष्टिकोण का उपयोग करने की सिफारिश नहीं करता।
एक अस्थायी फ़ाइल का उपयोग करें। यह सुरक्षित है।
आप फ़ाइल सामग्री को स्ट्रिंग में संग्रहीत कर सकते हैं और स्ट्रिंगबिल्डर-ऑब्जेक्ट का उपयोग कर वांछित रेखा को प्रीपेड कर सकते हैं। आपको बस वांछित रेखा को पहले रखना होगा और फिर फ़ाइल-सामग्री-स्ट्रिंग को जोड़ना होगा।
कोई अतिरिक्त अस्थायी फ़ाइल की आवश्यकता नहीं है।
जो मौजूदा फ़ाइल सामग्री को नए से बदल देगा। यह फ़ाइल सिस्टम में सामग्री को स्थानांतरित करके और इससे पहले नई सामग्री डालने से फ़ाइल को स्थानांतरित नहीं करेगा, जो सवाल पूछा गया है। – jwenting
नहीं। कोई "इंट्रा-फ़ाइल शिफ्ट" ऑपरेशन नहीं है, केवल अलग-अलग आकारों को पढ़ और लिखना है।
यह करना संभव होगा कि आप जिस चीज को प्रीपेन्ड करना चाहते हैं, उसमें नई सामग्री लिखना, बाद में खंड पढ़ना और इसे पहले जो आपने पढ़ा है उसे बदलकर, और इसी तरह, फ़ाइल के अंत तक नीचे rippling।
हालांकि, ऐसा न करें, क्योंकि अगर कुछ भी बंद हो जाता है (आउट-ऑफ-मेमोरी, पावर आउटेज, नकली थ्रेड System.exit
) उस प्रक्रिया के मध्य में, डेटा खो जाएगा। इसके बजाय अस्थायी फ़ाइल का प्रयोग करें।
एक तरीका है, इसमें पूरी फ़ाइल को फिर से लिखना शामिल है (लेकिन कोई अस्थायी फ़ाइल नहीं)। जैसा कि अन्य ने उल्लेख किया है, कोई फ़ाइल सिस्टम किसी फ़ाइल में पूर्ववत सामग्री का समर्थन नहीं करता है। यहाँ लिख सकते हैं और कुछ स्मृति में बफ़र सामग्री रखते हुए सामग्री पढ़ने के लिए एक RandomAccessFile का उपयोग करता है कुछ नमूना कोड है:
public static void main(final String args[]) throws Exception {
File f = File.createTempFile(Main.class.getName(), "tmp");
f.deleteOnExit();
System.out.println(f.getPath());
// put some dummy content into our file
BufferedWriter w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f)));
for (int i = 0; i < 1000; i++) {
w.write(UUID.randomUUID().toString());
w.write('\n');
}
w.flush();
w.close();
// append "some uuids" to our file
int bufLength = 4096;
byte[] appendBuf = "some uuids\n".getBytes();
byte[] writeBuf = appendBuf;
byte[] readBuf = new byte[bufLength];
int writeBytes = writeBuf.length;
RandomAccessFile rw = new RandomAccessFile(f, "rw");
int read = 0;
int write = 0;
while (true) {
// seek to read position and read content into read buffer
rw.seek(read);
int bytesRead = rw.read(readBuf, 0, readBuf.length);
// seek to write position and write content from write buffer
rw.seek(write);
rw.write(writeBuf, 0, writeBytes);
// no bytes read - end of file reached
if (bytesRead < 0) {
// end of
break;
}
// update seek positions for write and read
read += bytesRead;
write += writeBytes;
writeBytes = bytesRead;
// reuse buffer, create new one to replace (short) append buf
byte[] nextWrite = writeBuf == appendBuf ? new byte[bufLength] : writeBuf;
writeBuf = readBuf;
readBuf = nextWrite;
};
rw.close();
// now show the content of our file
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
निजी स्थिर शून्य addPreAppnedText (फ़ाइल FILENAME) {
FileOutputStream fileOutputStream = बातिल;
BufferedReader br = null;
FileReader fr = null;
String newFileName = fileName.getAbsolutePath() + "@";
try {
fileOutputStream = new FileOutputStream(newFileName);
fileOutputStream.write("preappendTextDataHere".getBytes());
fr = new FileReader(fileName);
br = new BufferedReader(fr);
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null) {
fileOutputStream.write(("\n"+sCurrentLine).getBytes());
}
fileOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fileOutputStream.close();
if (br != null)
br.close();
if (fr != null)
fr.close();
new File(newFileName).renameTo(new File(newFileName.replace("@", "")));
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
- 1. फ़ाइल में लाइनें जोड़ें
- 2. तैयार करने के लिए सत्र अक्षम करें
- 3. कैसे कुछ लाइनें टिप्पणी करने के लिए,
- 4. फ़ाइल से खाली लाइनें हटाएं
- 5. एंड्रॉइड एमुलेटर नियंत्रण के लिए केएमएल फ़ाइल कैसे तैयार करें?
- 6. एक परियोजना "रिपोजिटरी/टीम" तैयार करने के लिए कैसे तैयार करें
- 7. एक जावा फ़ाइल को संकलित करने के लिए कैसे करें
- 8. HTTP PUT जावा में फ़ाइल अपलोड करने के लिए
- 9. तैयार कथन में mysql enum के लिए जावा enum
- 10. उत्पादन के लिए 3.0 तैयार तैयार है
- 11. फ़ाइल क्यों है। फ़ाइल से बहुत बेहतर खोलें। मौजूदा फ़ाइल को ओवरराइट करने के लिए तैयार करें?
- 12. जावा तैयार कथन सम्मिलित करने के लिए tablename चर का उपयोग कैसे करें
- 13. ईमेल भेजने के लिए तैयार करने के लिए
- 14. क्या स्कैला में "मैक्रो" परिभाषाएं उपयोग करने के लिए तैयार हैं - जैसे लाइन, फ़ाइल?
- 15. पर्ल - फ़ाइल या सरणी में डुप्लिकेट लाइनें पाएं
- 16. सी # या जावा: स्ट्रिंगबिल्डर के साथ स्ट्रिंग तैयार करें?
- 17. प्रशिक्षण डेटा तैयार करने के लिए सामान्य ढांचे?
- 18. रेलवे में तैयार होने के साथ openId को एकीकृत करने के लिए कैसे करें 3
- 19. जावा में वेबस्केट उत्पादन तैयार सर्वर?
- 20. जावा जावा में सभी फ़ाइल ताले/हैंडल को रिलीज करने के लिए फोर्स जावा
- 21. मैं सी ++ में टेक्स्ट फ़ाइल से लंबी लाइनें कैसे पढ़ूं?
- 22. अद्यतन करने के लिए तैयार रत्न कैसे जांचें?
- 23. तैनाती तैयार करें Commit चरण विफल, लेनदेन तैयार करने में असमर्थ
- 24. कमांड लाइन से टेक्स्ट फ़ाइल में अद्वितीय लाइनें कैसे खोजें?
- 25. क्या जेआरबी उत्पादन के लिए तैयार है?
- 26. जैस्पर रिपोर्ट में नई लाइनें?
- 27. सी # में फ़ाइल निष्पादित करने के लिए कैसे करें?
- 28. रूबी में फ़ाइल को सॉर्ट करने के लिए कैसे करें
- 29. फ़ाइल फ़ील्ड को फ़ाइल करने के लिए कैसे निर्यात करें?
- 30. जावा में फैक्ट्रियों को पैकेज करने के लिए कैसे करें
आप पूरी तरह से असुरक्षित के बारे में सही हैं। मुझे नहीं पता कि मैंने इसके बारे में क्यों उल्लेख नहीं किया। – BalusC