2010-01-24 5 views
7

Je travaille sur un devoir pour l'école, et j'essaie quelque chose au-delà pour un crédit supplémentaire. Le programme doit démontrer les différences d'efficacité entre une recherche binaire linéaire & pour une taille de tableau donnée d'entiers. J'ai une boucle configurée qui crée un tableau int [size], recherche un nombre aléatoire, puis crée un nouveau tableau de int [size * 2].Comment effacer un texte existant dans un fichier

Les résultats sont ensuite écrits dans un fichier texte. La sortie écrit bien, mais après avoir compilé plusieurs fois le programme &, le fichier de sortie contient autant de sections de données.

Ceci est mon code qui est imbriqué dans un bloc try/catch:

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

Est-il possible que je peux effacer le texte dans ce fichier de sortie à chaque fois que le programme est exécuté? La raison pour laquelle je fais cela est que le professeur exige l'impression du résultat avec les données représentées graphiquement. J'ai déjà complété l'exigence graphique, et cela fonctionne bien. Je veux juste que l'impression du fichier corresponde à l'impression du graphique.

Répondre

3

Comme déjà mentionné, le constructeur [FileWriter] [1] vous permet de spécifier d'effacer le texte existant et de commencer au début du fichier. Quelques autres remarques sur le code:

  • La vérification sur output.exists() est redondante après un appel à output.canWrite() et n'est pas nécessaire. output.canWrite() vérifiera si le fichier existe et que vous pouvez y écrire.
  • N'oubliez pas de fermer l'objet BufferedWriter.

comme ceci:

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

+0

Merci pour l'aide. Quand j'ai changé la valeur booléenne à false, tout a bien fonctionné. Pour ce qui est de canWrite() et exists(), je n'y avais pas pensé, puisque j'ai utilisé ce conditionnel de l'exemple de l'auteur de fichiers de mon professeur, bien qu'il ait utilisé PrintStream & une méthode auxiliaire pour faire la même chose. Merci de l'avoir signalé. – Jason

5

Le deuxième argument du constructeur FileWriter, que vous passez en "true", est "append". C'est à dire. car vous l'avez défini sur true, il ajoutera votre nouvelle sortie à la fin du fichier. Si vous passez false à la place, les données déjà présentes seront effacées et écrites à nouveau.

4

Lisez la documentation de FileWriter. Vous voulez pas voulez ajouter.

0

Bon alors j'ai essayé quelque chose et ça a marché. C'est quand vous avez un fichier qui est destiné à ajouter un nouveau texte, mais vous voulez réinitialiser/effacer le contenu du fichier au début de l'exécution du programme. J'espère que j'ai fait sens.

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(); 
Questions connexes