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();
}
}
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
Différences
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
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.
Une PrintWriter
a un concept différent de gestion des erreurs. Vous devez appeler checkError()
au lieu d'utiliser des blocs try/catch.
PrintWriter
ne lance pas IOException
.Vous devez appeler la méthode checkError()
à cette fin.
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.
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.
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.