2016-09-12 1 views
-1

Voici le contenu du constructeur d'une classe appelée par la méthode principale.BufferedWriter écrit sur la console au lieu du fichier texte

File f = null; 
    Scanner s; 
    try { 
     f = new File(getClass().getResource("/LOL.txt").toURI()); 
    } catch (URISyntaxException e) { 
     e.printStackTrace(); 
    } 
    try { 
     s = new Scanner(f); 
     while(s.hasNextLine()) System.out.println(s.nextLine()); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    try { 
    FileWriter fw = new FileWriter(f.getAbsoluteFile(), false); 
    BufferedWriter bw = new BufferedWriter(fw); 
    bw.write("LOL"); 
    bw.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

sortie dans la console:

LOL 

Le contenu du fichier restent inchangés même après plusieurs passages. Mon IDE est Eclipse

+0

Imprimer f.getAbsoluteFile() toString() et voir ce que cela vous donne. –

+0

Merde, ce code est plein de bugs potentiels. Devrais-je les corriger? –

+0

Veuillez les corriger –

Répondre

1

Vous paramétrez votre FileWriter avec boolean append comme false.

Par conséquent, le même fichier sera écrit chaque fois que le constructeur donné est exécuté, et "LOL" sera imprimé dedans.

Avant d'imprimer "LOL", un Scanner lit chaque ligne et l'imprime, d'où le LOL imprimé dans notre système.

Notez également, vous voulez probablement déclarer votre FileWriter et BufferedWriter hors du bloc try, de sorte que vous pouvez rincer et de les fermer dans un bloc finally.

+0

J'ai retiré la partie scanner. Il n'imprime pas sur la console mais n'écrit même pas dans le fichier. Aucune exception –

+0

@ARJAVGARG comment testez-vous que le fichier n'est pas écrit? – Mena

+0

Je le ferme en éclipse (avant de l'exécuter) et l'ouvre dans l'explorateur Windows –

0

Ce message ne contient que la question initiale, tout comme tout ce qui a été corrigé pour éviter plusieurs bogues liés aux ressources. Il suppose que Java 6 ou inférieur.

Je ne devrais pas obtenir de upvote donc s'il vous plaît ne pas;.)

package so39452286; 

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.Writer; 
import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 
    new Main().run(); 
    } 

    public void run() { 
    try { 
     File file = new File(getClass().getResource("/LOL.txt").toURI()); 
     Scanner scanner = null; 
     try { 
     scanner = new Scanner(file); 
     while (scanner.hasNextLine()) { 
      System.out.println(scanner.nextLine()); 
     } 
     } finally { 
     if (scanner != null) { 
      scanner.close(); 
     } 
     } 
     Writer writer = null; // Holds the main resource, not the wrapping ones. 
     try { 
     writer = new FileWriter(file.getAbsolutePath(), false); 
     BufferedWriter bw = new BufferedWriter(writer); 
     bw.write("LOL"); 
     bw.flush(); // You forgot to flush. Ok, close() does it, but it's always better to be explicit about it. 
     } finally { 
     if (writer != null) { 
      writer.close(); 
     } 
     } 
    } catch (Exception e) { 
     // Do something with e. 
     e.printStackTrace(System.err); 
    } 
    } 
} 
+0

Impression LOLLOL à la console –

+0

Eh bien, alors vous ajoutez quelque chose d'autre à ce fichier, parce que cela fonctionne bien pour moi ... –

+0

Je viens de copier/coller tout le code que j'ai utilisé. Tout ce que j'arrive à ma console est 1. un texte vide la première fois que je cours parce que 'LOL.txt' ne contient rien et 2. Le texte' LOL'. –