2010-01-24 9 views
7

मैं स्कूल के लिए असाइनमेंट पर काम कर रहा हूं, और अतिरिक्त क्रेडिट के लिए कुछ और करने की कोशिश कर रहा हूं। कार्यक्रम पूर्णांक के दिए गए सरणी आकार के लिए रैखिक & बाइनरी खोज के बीच दक्षता अंतर प्रदर्शित करना है। मेरे पास एक लूप सेट अप है जो एक int [size] सरणी बनाता है, एक यादृच्छिक संख्या की खोज करता है, फिर int [size * 2] की एक नई सरणी बनाता है।फ़ाइल में मौजूदा टेक्स्ट को मिटाने के लिए कैसे करें

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

File output= new File("c:\\BigOhResults.txt"); 
int counter=2; 

if (output.canWrite() && output.exists()) { 
    BufferedWriter out= new BufferedWriter(new FileWriter(output, true)); 
    out.write(type+" \n\n"); //writes the search type 
    out.write(type+"Search Results\n\n"); 

    while (counter <= data.size()) { 
     out.write(data.get(counter-1)+" millisecond runtime " + 
     "for a "+ data.get(counter-2)+" random number " +"sample size\n"); 
     counter=counter+2; 
    } 
} 

:

यह मेरा कोड है कि एक आज़माएं/कैच ब्लॉक के अंदर नेस्टेड है?

कारण मैं ऐसा कर रहा हूं प्रोफेसर को डेटा के साथ परिणाम प्रिंटआउट की आवश्यकता होती है। मैंने पहले ही ग्राफिंग आवश्यकता पूरी कर ली है, और यह ठीक काम करता है। मैं सिर्फ फाइल प्रिंटआउट ग्राफ प्रिंटआउट से मेल खाना चाहता हूं।

उत्तर

3

जैसा कि पहले से ही उल्लेख किया गया है, [FileWriter] [1] कन्स्ट्रक्टर आपको मौजूदा टेक्स्ट को साफ़ करने और फ़ाइल की शुरुआत में शुरू करने के लिए निर्दिष्ट करने की अनुमति देता है। कोड के बारे में कुछ अन्य टिप्पणियां:

  • output.exists() पर जांच output.canWrite() की कॉल के बाद अनावश्यक है और इसकी आवश्यकता नहीं है। output.canWrite() जांच करेगा कि फ़ाइल मौजूद है या नहीं और आप इसे लिख सकते हैं।
  • BufferedWriter ऑब्जेक्ट को बंद करने के लिए मत भूलना।
तो जैसा

:

if (output.canWrite()) { 
    BufferedWriter out = null; 
    try { 
     out = new BufferedWriter(new FileWriter(output, false)); 
     out.write(type+" \n\n"); //writes the search type 
     out.write(type+"Search Results\n\n"); 

     while (counter <= data.size()) { 
      out.write(data.get(counter-1)+" millisecond runtime " + 
       "for a "+ data.get(counter-2)+" random number " +"sample size\n"); 
      counter=counter+2; 
     } 
    } catch (IOException e) { 
     // Do what you want here, print a message or something 
    } finally { 
     if(out != null) { 
      try { 
       out.close(); 
      } catch (IOException e) { 
       // Again, do what you want here 
      } 
     } 
    } 

} 

[1]: http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileWriter.html#FileWriter(java.io.File, बुलियन)

+0

सहायता के लिए धन्यवाद। जब मैंने बुलियन मूल्य को गलत में बदल दिया, तो सब ठीक काम किया। कैनवाइट() और मौजूद है() के लिए, मैंने इसके बारे में सोचा नहीं था, क्योंकि मैंने अपने प्रोफेसर के फ़ाइल-लेखक उदाहरण से उस सशर्त का उपयोग किया था, हालांकि उन्होंने एक ही काम करने के लिए प्रिंटस्ट्रीम और एक सहायक विधि का उपयोग किया था। इस पर ध्यान दिलाने के लिए धन्यवाद। – Jason

5

फ़ाइलवाइटर कन्स्ट्रक्टर का दूसरा तर्क, जिसे आप "सत्य" में गुजर रहे हैं, "संलग्न" है। अर्थात। क्योंकि आपने इसे सत्य पर सेट कर दिया है, यह आपके नए आउटपुट को फ़ाइल के अंत में जोड़ देगा। यदि आप बदले में गलत हो जाते हैं, तो वह पहले से मौजूद डेटा को मिटा देगा और इसे नया लिख ​​देगा।

4

FileWriter के लिए प्रलेखन पढ़ें। आप नहीं जोड़ना चाहते हैं।

0

ठीक है तो मैं कुछ करने की कोशिश की और यह काम किया। यह तब होता है जब आपके पास कोई फ़ाइल होती है जिसका उद्देश्य किसी भी नए पाठ को जोड़ना है, लेकिन आप प्रोग्राम निष्पादन की शुरुआत में फ़ाइल की सामग्री को रीसेट/मिटाना चाहते हैं। आशा है कि मुझे समझ में आया।

PrintWriter pw1 = new PrintWriter(new BufferedWriter(new FileWriter("newfile.txt"))); 
    pw1.close(); // Make sure the first PrintWriter object name is different from the second one. 

    PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("newfile.txt", true))); // PrintWriter in append-mode. When you recreate the text file with the same name, the file contents are erased because the previous object was not in append mode. 
    pw.close(); 
संबंधित मुद्दे