2011-11-11 23 views
11

मुझे पता है कि यह प्रश्न this प्रश्न का एक उग्र डुप्लिकेट है। हालांकि, अब मैंने पूरे पृष्ठ को दो बार पढ़ा है, और कुछ खंड 3 बार, और मेरे जीवन के लिए मैं नहीं देखता कि इसका उत्तर कैसे दिया जाता है!जावा 6 फ़ाइल हटाना

तो, मेरी समस्या पर।

मैं काम पर हूं और जावा 6 एसई का उपयोग कर फंस गया हूं और 7 तक अपग्रेड नहीं कर सकता हूं। मैं एक प्रोग्राम लिख रहा हूं जो एक फाइल बनाता है, लिखता है, कुछ प्रसंस्करण करता है, और फिर फ़ाइल को अस्तित्व से बाहर करने की आवश्यकता होती है। मुझे वही समस्या है जिस व्यक्ति ने ऊपर दिए गए प्रश्न से पूछा है: जावा फ़ाइल को नहीं हटाएगा और मैं यह नहीं समझ सकता कि क्यों।

कोड:

File f = null; 
FileWriter fw = null; 
try 
{ 
    f = new File("myFile.txt"); 
    fw = new FileWriter(f); 
    fw.write("This is a sentence that should appear in the file."); 
    fw.flush(); 
    if(f.delete()) 
     System.out.println("File was successfully deleted."); 
    else 
     System.err.println("File was not deleted."); 
} 
catch(Exception exc) 
{ 
    System.err.println(exc.getMessage()); 
} 
catch(Error er { 
    System.err.println(er.getMessage()); 
} 
catch(Throwable t) 
{ 
    System.err.println(t.getMessage()); 
} 
finally 
{ 
    fw.close(); 
} 

यह किसी भी throwables, त्रुटियों या अपवाद फेंक नहीं है (मैं किसी भी और सभी किनारे मामलों को खारिज करने के लिए उन शामिल)। दूसरा प्रिंट स्टेटमेंट ("File was not deleted.") कंसोल पर मुद्रित किया जा रहा है। मैं इसे विंडोज 7 पर चला रहा हूं और एक फ़ोल्डर में लिख रहा हूं जहां मेरे पास पूर्ण अनुमतियां हैं (आरडब्ल्यूएक्स)।

उपयोगकर्ता द्वारा दिए गए प्रश्न पूछने वाले उपयोगकर्ता ने अपने प्रश्न का उत्तर दिया, लेकिन ऐसा नहीं है (मेरी विनम्र राय में) एक सीधी-आगे के रास्ते में। किसी भी मामले में, मुझे इसकी समझ में परेशानी हो रही है। वह इस तथ्य की ओर इशारा करते हुए प्रतीत होता है कि का उपयोग FileInputStream के विपरीत किया गया है, लेकिन मैं नहीं देखता कि यह कैसे लागू होता है।

जावा 7 ने java.nio.file.Files कक्षा के परिचय के साथ इस समस्या को ठीक किया है, लेकिन फिर से, मैं अपने नियंत्रण के दायरे से बाहर के कारणों के लिए जावा 7 का उपयोग नहीं कर सकता।

उस संदर्भित प्रश्न के अन्य उत्तरदाताओं ने बताया कि यह जावा में "बग" है, और सभी प्रकार के circumventions, जैसे स्पष्ट रूप से System.gc() आदि को कॉल करना, मैंने इन सभी को आजमाया है और वे काम नहीं कर रहे हैं।

शायद कोई नया परिप्रेक्ष्य जोड़ सकता है और मेरे लिए कुछ सोच जॉग कर सकता है।

+0

मुझे नहीं लगता कि यह एक डुप्लिकेट है। जैसा कि आपने दूसरे प्रश्न से सुझाए गए समाधानों का प्रयास किया है और उन्होंने मदद नहीं की है, यह संभावना है कि कारण अलग है। – finnw

+2

इसे पहले बंद करें। और ... "जावा 6 का उपयोग कर फंस गया?" मैं एक निगम नहीं जानता जो जेडीके 7 पर चल रहा है। मुझे कई लोग जानते हैं जो 1.4 और 1.5 पर हैं। अपने आप को भाग्यशाली मानें। –

+0

कृपया ध्यान दें कि आपने जो कहा है वह विपरीत है: BufferedReader के बजाय FileInputStream का उपयोग करना दूसरे पोस्ट में उपयोगकर्ता के लिए क्या काम करता है। यह क्यों लागू होता है, वहां कुछ टिप्पणी जावा में एक बग का सुझाव देती है। –

उत्तर

17

आप एक फ़ाइल को हटाने की कोशिश कर रहे हैं() एक फ़ाइल जिसे अभी भी सक्रिय, खुले फ़ाइलवाइटर द्वारा संदर्भित किया गया है।

इस प्रयास करें:

f = new File("myFile.txt"); 
fw = new FileWriter(f); 
fw.write("This is a sentence that should appear in the file."); 
fw.flush(); 
fw.close(); // actually free any underlying file handles. 
if(f.delete()) 
    System.out.println("File was successfully deleted."); 
else 
    System.err.println("File was not deleted."); 
8

आप केवल फ़ाइल अगर कोई फ़ाइल हैंडलर खोला छोड़ दिया है हटा सकते हैं। चूंकि आप FileWriter का उपयोग कर फ़ाइल हैंडलर खोलते हैं, इसलिए इसे हटाने से पहले आपको इसे बंद करना होगा। दूसरे शब्दों में, f.delete को fw.close

के बाद निष्पादित किया जाना चाहिए नीचे दिए गए कोड को आज़माएं। मैंने आपके द्वारा प्राप्त होने वाली सभी संभावित बग को रोकने के लिए परिवर्तन किए हैं, उदाहरण के लिए यदि fw शून्य है।

File f = null; 
FileWriter fw = null; 
try { 
    f = new File("myFile.txt"); 
    fw = new FileWriter(f); 
    fw.write("This is a sentence that should appear in the file."); 
    fw.flush(); // flush is not needed if this is all your code does. you data 
       // is automatically flushed when you close fw 
} catch (Exception exc) { 
    System.err.println(exc.getMessage()); 
} finally {// finally block is always executed. 
    // fw may be null if an exception is raised in the construction 
    if (fw != null) { 
     fw.close(); 
    } 
    // checking if f is null is unneccessary. it is never be null. 
    if (f.delete()) { 
     System.out.println("File was successfully deleted."); 
    } else { 
     System.err.println("File was not deleted."); 
    } 
} 
संबंधित मुद्दे