95 votes

comment effacer le contenu d'un fichier texte sans l'effacer lui-même

Je veux copier le contenu du fichier 'A' vers le fichier 'B'. Une fois la copie terminée, je veux effacer le contenu du fichier 'A' et écrire dessus depuis le début. Je ne peux pas supprimer le fichier 'A' car il est lié à une autre tâche.

J'ai pu copier le contenu en utilisant l'API de fichier de Java (readLine()), mais je ne sais pas comment effacer le contenu du fichier et placer le pointeur de fichier au début du fichier.

143voto

Vlad Points 3736

Il suffit d'imprimer une chaîne vide dans le fichier :

PrintWriter writer = new PrintWriter(file);
writer.print("");
writer.close();

17 votes

L'écriture n'est pas nécessaire, et si une autre tâche a le fichier ouvert, l'ouverture peut même ne pas être possible.

0 votes

Writer.close ??, nous sommes en 2017 !!!. Aussi, pas besoin de print(""), car le texte sera écrasé

3 votes

@Andro, tu as remarqué l'horodatage et les tags ? À l'époque, je me souviens que c'était le moyen le plus fiable de vider un fichier sur les appareils Android.

78voto

CamLeng Points 118

Je ne crois pas qu'il faille écrire une chaîne vide dans le fichier.

PrintWriter pw = new PrintWriter("filepath.txt");
pw.close();

9 votes

Vous avez raison sur ce point. Toutes les réponses montrant une écriture sont fausses ou au mieux redondantes.

37 votes

Pourquoi ne pas simplement new PrintWriter("filepath.txt").close(); ?

1 votes

Citation de la documentation java "Si le fichier existe, il sera tronqué à une taille nulle".

31voto

Burleigh Bear Points 1802

Vous voulez la méthode setLength() dans la classe RandomAccessFile.

5 votes

C'est en fait la seule réponse correcte, car elle ne supprime pas le fichier. Toutes les autres réponses le font.

0 votes

J'en ai besoin car je souhaite effacer le fichier journal créé par logback-Android bibliothèque. Si je supprime le fichier journal manuellement, la bibliothèque n'est pas assez intelligente pour le recréer s'il y a un journal à écrire jusqu'à ce que je relance mon application. Par conséquent, j'ai utilisé cette méthode et le travail. Je n'ai pas beaucoup étudié. N'est-ce pas la meilleure approche ? Veuillez me conseiller.

0 votes

Curieusement, j'ai un problème de production car la carte Intenso classe 10 se bloque (et force la réinitialisation de la batterie) lorsque j'appelle fileOnSdCard.setLength(0) pour une application installée à partir d'un fichier .apk. Leur carte de classe 4 n'a jamais présenté ce problème.

18voto

Micky Points 275

C'est simple, n'écrivez rien !

FileOutputStream writer = new FileOutputStream("file.txt");
writer.write(("").getBytes());
writer.close();

5 votes

-1 : java.lang.String n'a pas de méthode toByteArray(), ni en 6 ni en 7. docs.oracle.com/javase/6/docs/api/java/lang/String .

1 votes

Il existe depuis longtemps : [docs.oracle.com/javase/6/docs/api/java/lang/](http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#getBytes())

1 votes

L'écriture est inutile ici.

5voto

Rasel Points 9997

Après avoir copié de A à B, ouvrez de nouveau le fichier A en mode écriture et écrivez-y une chaîne vide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X