2017-08-14 5 views
0

Je veux écrire dans un fichier en utilisant UTF-16 donc j'utilise PrintWriter (fichier, "UTF-16"), mais ensuite il supprime tout dans le fichier, je pourrais utiliser FileWriter (fichier, true) , mais alors il ne serait pas en UTF-16, et il n'y a apparemment pas de constructeur pour PrintWriter comme PrintWriter (Writer, Charset, boolean append);Java PrintWriter File Overwrite

Que dois-je faire?

+0

Vous pouvez tout lire en premier, mettre à jour ces données, puis les réécrire dans le "nouveau" fichier? –

+2

@tima: Ce n'est pas une copie de cela, pour autant que je puisse voir. Rien ici ne gère l'ajout de * et * en spécifiant l'encodage. –

+0

@KenReid Ajoutant à un fichier est une chose assez ordinaire à vouloir faire. Il ne devrait jamais être nécessaire de slurper un fichier puis de le réécrire depuis le début. Ce serait souvent inefficace. Dans certains cas, le fichier ne rentrerait pas dans la mémoire. – slim

Répondre

3

Le JavaDoc pour FileWriter dit:

Les constructeurs de cette classe suppose que le caractère par défaut le codage et la La taille de tampon octet par défaut est acceptable. Pour spécifier vous-même ces valeurs, construisez un OutputStreamWriter sur un FileOutputStream.

Alors, vous pouvez:

Writer writer = new PrintWriter(
    new OutputStreamWriter(
      new FileOutputStream(filename, true), 
      StandardCharsets.UTF16)); 

Vous pouvez inclure BufferedOutputStream là aussi pour une efficacité maximale.

2

Utilisez OutputStreamWriter avec un jeu de caractères UTF-16, en encapsulant un FileOutputStream ouvert avec append = true. Alternatives, utilisez Files.newBufferedWriter:

try (Writer writer = Files.newBufferedWriter(
     Paths.of("filename.txt"), 
     StandardCharsets.UTF_16, 
     StandardOpenOption.APPEND)) { 
    ... 
} 
0

Vous pouvez le faire en utilisant

new PrintWriter(new OutputStreamWriter(new FileOutputStream(file, true), "UTF-16"));