web-dev-qa-db-fra.com

PrintWriter vs FileWriter en Java

Est-ce que PrintWriter et FileWriter sous Java sont identiques et peu importe lequel utiliser? Jusqu'à présent, j'ai utilisé les deux parce que leurs résultats sont les mêmes. Y a-t-il des cas spéciaux où il est logique de préférer l'un à l'autre? 

public static void main(String[] args) {

    File fpw = new File("printwriter.txt");
    File fwp = new File("filewriter.txt");
    try {
        PrintWriter pw = new PrintWriter(fpw);
        FileWriter fw = new FileWriter(fwp);
        pw.write("printwriter text\r\n");
        fw.write("filewriter text\r\n");
        pw.close();
        fw.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
32
ough

Selon coderanch.com, si nous combinons les réponses, nous obtenons:

FileWriter est la représentation des caractères d'IO. Cela signifie qu'il peut être utilisé pour écrire des caractères. En interne, FileWriter utilise le jeu de caractères par défaut du système d'exploitation sous-jacent, convertit les caractères en octets et les écrit sur le disque.

PrintWriter & FileWriter.

Similitudes

  1. Les deux s'étendent de Writer.
  2. Les deux sont des classes de représentation de caractères, ce qui signifie qu'elles utilisent des caractères et les convertissent en octets en utilisant le jeu de caractères par défaut.

Différences

  1. FileWriter lève une exception IOException en cas d'échec de IO. Il s'agit d'une exception vérifiée.
  2. Aucune des méthodes PrintWriter ne renvoie IOException, mais définit un indicateur booléen pouvant être obtenu à l'aide de checkError ().
  3. PrintWriter a un constructeur facultatif que vous pouvez utiliser pour activer le vidage automatique lorsque des méthodes spécifiques sont appelées. Aucune option de ce type n'existe dans FileWriter.
  4. Lors de l'écriture dans des fichiers, FileWriter a un constructeur facultatif qui lui permet de s'ajouter au fichier existant lorsque la méthode "write ()" est appelée.

Différence entre PrintStream et OutputStream: Similaire à l'explication ci-dessus, il suffit de remplacer caractère par octet. 

PrintWriter a les méthodes suivantes:

close()
flush()
format()
printf()
print()
println()
write()

et les constructeurs sont:

File (as of Java 5)
String (as of Java 5)
OutputStream
Writer

fileWriter ayant les méthodes suivantes:

close()
flush()
write()

et les constructeurs sont:

File
String 

Lien: http://www.coderanch.com/t/418148/Java-programmer-SCJP/certification/Information-PrintWriter-FileWriter

26
kamaci

Ces deux utilisent une FileOutputStream en interne:

public PrintWriter(File file) throws FileNotFoundException {
this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))),
     false);
}



public FileWriter(File file) throws IOException {
super(new FileOutputStream(file));
}

mais la principale différence est que PrintWriter offre des méthodes spéciales:

Imprime des représentations formatées de objets dans un flux de sortie de texte. Ce La classe implémente tous les caractères d'impression méthodes trouvées dans PrintStream. Cela fait ne contient pas de méthodes pour écrire raw octets, pour lesquels un programme doit utiliser flux d'octets non codés.

Contrairement à la classe PrintStream, si le rinçage automatique est activé il le sera être fait seulement quand un des println, printf, ou les méthodes de formatage sont appelées, plutôt que chaque fois qu'une nouvelle ligne le caractère arrive à être sorti. Celles-ci les méthodes utilisent la propre notion de la plateforme de séparateur de ligne plutôt que le caractère de nouvelle ligne.

8
Sean Patrick Floyd

Une PrintWriter a un concept différent de gestion des erreurs. Vous devez appeler checkError() au lieu d'utiliser des blocs try/catch.

5
Ted Hopp

PrintWriter ne lance pas IOException.Vous devez appeler la méthode checkError() à cette fin.

3
sergionni

Le Java.io.PrintWriter dans Java5 + permettait l'utilisation d'une méthode/d'un constructeur qui écrit dans le fichier . À partir du Javadoc;

Crée un nouveau PrintWriter, sans vidage automatique de la ligne, avec le fichier spécifié. Ce constructeur de commodité crée le OutputStreamWriter intermédiaire nécessaire, qui encodera les caractères à l'aide du jeu de caractères par défaut pour cette instance de la machine virtuelle Java. 

3
Koekiebox

juste pour fournir plus d'informations relatives à FLUSH et Close menthod liée à FileOutputStream

flush () --- s'assure simplement que toutes les données mises en mémoire tampon sont écrites sur le disque complètement vidé et prêtes à être réécrites dans le flux (ou l'écrivain) ultérieurement.

close () ---- efface les données et ferme tous les descripteurs de fichiers, sockets ou autres. Maintenant, la connexion a été perdue et vous ne pouvez rien écrire dans outputStream.

0
satender

Le fait que Java.io.FileWriter repose sur le codage de caractères par défaut de la plate-forme le rend plutôt inutile pour moi. Vous ne devez jamais présumer de l'environnement dans lequel votre application sera déployée.

0
roland