2010-01-24 15 views
7

Sto lavorando a un incarico per la scuola, e sto cercando qualcosa oltre per un credito extra. Il programma è di dimostrare le differenze di efficienza tra una ricerca binaria lineare & per una data dimensione di array di numeri interi. Ho creato un loop che crea un array [size] int, cerca un numero casuale, quindi crea un nuovo array di int [size * 2].Come cancellare il testo esistente in un file

I risultati vengono quindi scritti in un file di testo. L'output scrive bene, ma dopo aver compilato il programma & più volte, il file di output contiene molte sezioni di dati. ci

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; 
    } 
} 

è un modo per cancellare il testo all'interno di file di output che su ogni volta che il programma viene eseguito:

Questo è il mio codice che è nidificato all'interno di un blocco try/catch?

la ragione per cui sto facendo questo è il professore richiede la stampa dei risultati con i dati grafici. Ho già completato i requisiti grafici e funziona correttamente. Voglio solo che la stampa del file corrisponda alla stampa del grafico.

risposta

3

Come già accennato, il costruttore [FileWriter] [1] consente di specificare di cancellare il testo esistente e iniziare dall'inizio del file. Altre osservazioni sul codice:

  • Il controllo su output.exists() è ridondante dopo una chiamata a output.canWrite() e non è necessario. output.canWrite() controllerà se il file esiste e che è possibile scrivere su di esso.
  • Non dimenticare di chiudere l'oggetto BufferedWriter.

Come così:

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, booleano)

+0

Grazie per l'aiuto. Quando ho cambiato il valore booleano in falso, tutto ha funzionato bene. Come per canWrite() ed esiste(), non ci avevo pensato, dal momento che l'ho usato condizionale dall'esempio di scrittore di file del mio professore, sebbene usasse PrintStream e un metodo di supporto per fare la stessa cosa. Grazie per segnalarlo. – Jason

5

Il secondo argomento del costruttore FileWriter, che si sta passando in "true", è "append". Cioè perché hai impostato su true, aggiungerà il tuo nuovo output alla fine del file. Se invece passate false, cancellerà i dati già presenti e li scriverà nuovi.

4

Leggere la documentazione per FileWriter. È necessario aggiungere non.

0

Va bene così ho provato qualcosa e ha funzionato. Questo è quando si ha un file che è destinato ad aggiungere nuovi testi, ma si desidera ripristinare/cancellare il contenuto del file all'inizio dell'esecuzione del programma. Spero di avere un senso.

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(); 
Problemi correlati