कैसे खुद को हटाए बिना पाठ फ़ाइल की सामग्री को हटाने के लिए


89

मैं फ़ाइल 'A' की सामग्री को 'B' फ़ाइल में कॉपी करना चाहता हूँ। नकल होने के बाद मैं फ़ाइल 'ए' की सामग्री को साफ़ करना चाहता हूँ और इसकी शुरुआत से ही इस पर लिखना चाहता हूँ। मैं फ़ाइल 'ए' को हटा नहीं सकता क्योंकि यह किसी अन्य कार्य से संबंधित है।

मैं जावा की फ़ाइल एपीआई (रीडलाइन ()) का उपयोग करके सामग्री की प्रतिलिपि बनाने में सक्षम था, लेकिन फ़ाइल की सामग्री को साफ़ करने और फ़ाइल सूचक को फ़ाइल की शुरुआत में सेट करने का तरीका नहीं जानता।

जवाबों:


134

बस फ़ाइल में एक खाली स्ट्रिंग प्रिंट करें:

PrintWriter writer = new PrintWriter(file);
writer.print("");
writer.close();

14
लिखना आवश्यक नहीं है, और यदि किसी अन्य कार्य में फ़ाइल खुली हुई है तो संभव नहीं है।
लोरने का मार्किस

author.close ??, हम 2017 में हैं !!!। इसके अलावा, ("") मुद्रित करने की आवश्यकता नहीं है, क्योंकि पाठ को ओवरराइट किया जाएगा
एफएसएम

1
@Andro, टाइमस्टैम्प और टैग को नोटिस करें? फिर मुझे याद है कि यह एंड्रॉइड डिवाइसों में एक फ़ाइल को खाली करने का सबसे विश्वसनीय तरीका था।
Vlad

@Vlad यदि अब लेखक को बंद करने की कोई आवश्यकता नहीं है, तो शायद यह उत्तर को अपडेट करने के लिए एक अच्छा विचार है?
लाइन

70

मुझे विश्वास नहीं है कि आपको फ़ाइल को एक रिक्त स्ट्रिंग भी लिखना होगा।

PrintWriter pw = new PrintWriter("filepath.txt");
pw.close();

9
आप इसके बारे में सही हैं। लेखन को दर्शाने वाले सभी उत्तर गलत या बेमानी हैं।
लोरने का मार्किस

33
कैसे बस के बारे में new PrintWriter("filepath.txt").close();?
सुपहस्टार

1
जावा डॉक्स से बोली "यदि फ़ाइल मौजूद है तो इसे शून्य आकार में काट दिया जाएगा"
पिंकर्टन

1
लेकिन क्या करना है अगर फ़ाइल एपेंड मोड में है।
गुरमीत सिंह

अरे यार मैं खिचड़ी भाषा का मानना ​​है कि मैं सरल जवाब से चूक गया। ट्रंकैट मोड में फ़ाइल खोलें। मुझे ट्रंकैट मोड से इतनी नफरत है कि यह मुझे फिसल गया।

30

आप चाहते हैं कि SetLength () विधि randomAccessFile में हो।


5
यह वास्तव में एकमात्र सही उत्तर है, क्योंकि यह फ़ाइल को नष्ट नहीं करता है। अन्य सभी उत्तर देते हैं।
लोरेन का मार्किस

मुझे इसकी आवश्यकता है क्योंकि मैं लॉगबैक-एंड्रॉइड लाइब्रेरी द्वारा बनाई गई लॉग फ़ाइल को साफ़ करना चाहूंगा । यदि मैं लॉग फ़ाइल को मैन्युअल रूप से हटाता हूं, तो लाइब्रेरी इतनी चालाक नहीं है कि इसे फिर से बनाएं यदि मैं अपने ऐप को पुनः लॉन्च करने तक लिखने के लिए लॉग हूं। इसलिए, मैंने इस पद्धति और काम का उपयोग किया। मैंने ज्यादा पढ़ाई नहीं की है। क्या यह सबसे अच्छा तरीका नहीं है? कृपया सलाह दें।
युंग

मजेदार रूप से, मेरे पास एक उत्पादन मुद्दा है क्योंकि जब मैं .apk फ़ाइल से इंस्टॉल किए गए ऐप के लिए फ़ाइलऑनकार्डकार्डसेटसेट (0) को कॉल करता हूं तो इंटेंसो कार्ड क्लास 10 फ्रीज (और बैटरी रीसेट)। उनकी कक्षा 4 के कार्ड ने कभी मुद्दा नहीं दिखाया।
पोथराथोर

17

सरल, कुछ भी नहीं लिखो!

FileOutputStream writer = new FileOutputStream("file.txt");
writer.write(("").getBytes());
writer.close();

3
-1: java.lang.String में एक toByteArray () विधि नहीं है, न तो 6 में और न ही 7. डॉक्स.कोरल . com/javase/ 6/ docs/api/java/lang/String में
james.garriss

1
यह एक लंबे समय के लिए मौजूद है: docs.oracle.com/javase/6/docs/api/java/lang/…
kmas

1
यहाँ लिखना अनावश्यक है।
लोरने का मार्किस

10

एक लाइनर बनाने के लिए छोटा ऑपरेशन:

FileChannel.open(Paths.get("/home/user/file/to/truncate"), StandardOpenOption.WRITE).truncate(0).close();

जावा दस्तावेज़ में अधिक जानकारी उपलब्ध है: https://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html


+1 संपूर्ण फ़ाइल राइटिंग क्लास, (और इससे भी खराब लेखन) के लिए नहीं। यह वास्तव में स्वीकृत उत्तर होना चाहिए।
क्रॉ

6

कैसे के बारे में नीचे:

File temp = new File("<your file name>");
if (temp.exists()) {
    RandomAccessFile raf = new RandomAccessFile(temp, "rw");
    raf.setLength(0);
}

5

मोड लिखने के लिए A से B तक की फाइल को फिर से कॉपी करने के बाद उसमें खाली स्ट्रिंग लिखें


5

जावा के लिए सबसे अच्छा साथी अपाचे प्रोजेक्ट्स है और कृपया इसे देखें। फ़ाइल संबंधी ऑपरेशन के लिए आप कॉमन्स IO प्रोजेक्ट का उल्लेख कर सकते हैं ।

नीचे एक लाइन कोड हमें फ़ाइल को खाली करने में मदद करेगा।

FileUtils.write(new File("/your/file/path"), "")


2

फ़ाइल, फ्लश और बंद करने के लिए एक रिक्त स्ट्रिंग लिखें। सुनिश्चित करें कि फ़ाइल लेखक एपेंड-मोड में नहीं है। मुझे लगता है कि चाल चलनी चाहिए।


2

यदि आपको लेखक का उपयोग करने की आवश्यकता नहीं है, तो सबसे छोटा और साफ तरीका यह करने का तरीका होगा:

new FileWriter("/path/to/your/file.txt").close();

1

उपयोग: नया जावा 7 एनआईओ पुस्तकालय, कोशिश करें

        if(!Files.exists(filePath.getParent())) {
            Files.createDirectory(filePath.getParent());
        }
        if(!Files.exists(filePath)) {
            Files.createFile(filePath);
        }
        // Empty the file content
        writer = Files.newBufferedWriter(filePath);
        writer.write("");
        writer.flush();

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


0

आप उपयोग कर सकते हैं

FileWriter fw = new FileWriter(/*your file path*/);
PrintWriter pw = new PrintWriter(fw);
pw.write("");
pw.flush(); 
pw.close();

याद रखें उपयोग न करें

FileWriter fw = new FileWriter(/*your file path*/,true);

सही में filewriter निर्माणकर्ता एपेंड को सक्षम करेगा।


0
FileOutputStream fos = openFileOutput("/*file name like --> one.txt*/", MODE_PRIVATE);
FileWriter fw = new FileWriter(fos.getFD());
fw.write("");

एसओ में आपका स्वागत है! कृपया अपने कोड को पढ़ने में आसान बनाने के लिए अंतर्निहित स्वरूपण टूल का उपयोग करें।
माइकल एल।

0

संसाधनों के साथ लेखक स्वत: बंद हो जाएगा:

import org.apache.commons.lang3.StringUtils;
final File file = new File("SomeFile");
try (PrintWriter writer = new PrintWriter(file))  {
    writer.print(StringUtils.EMPTY);                
}
// here we can be sure that writer will be closed automatically

0

आपको बस इतना करना है कि ट्रंकट मोड में खुली हुई फ़ाइल है। कोई भी जावा फ़ाइल आउट क्लास आपके लिए स्वचालित रूप से कर देगा।


-2

आप एक सामान्य विधि लिख सकते हैं (इसके बहुत देर से लेकिन नीचे दिए गए कोड से आपको / दूसरों को मदद मिलेगी)

public static FileInputStream getFile(File fileImport) throws IOException {
      FileInputStream fileStream = null;
    try {
        PrintWriter writer = new PrintWriter(fileImport);
        writer.print(StringUtils.EMPTY);
        fileStream = new FileInputStream(fileImport);
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            writer.close();
        }
         return fileStream;
}

5
यह एक खाली फ़ाइल नहीं बनाता है, यह इसमें एक नल बाइट के साथ एक फ़ाइल बनाता है।
लोरने का मार्किस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.