comment supprimer le contenu d'un fichier texte sans se supprimer


89

Je souhaite copier le contenu du fichier «A» dans le fichier «B». une fois la copie terminée, je veux effacer le contenu du fichier «A» et je veux é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 à l'aide de l'API de fichier de java (readLine ()), mais je ne sais pas comment effacer le contenu du fichier et définir le pointeur de fichier au début du fichier.

Réponses:


134

Imprimez simplement une chaîne vide dans le fichier:

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

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

writer.close ??, nous sommes en 2017 !!!. De plus, pas besoin d'imprimer (""), car le texte sera écrasé
FSm

1
@Andro, remarquez l'horodatage et les balises? À l'époque, je me souviens que c'était le moyen le plus fiable de vider un fichier sur les appareils Android.
Vlad

@Vlad S'il n'est pas nécessaire de fermer le rédacteur maintenant, c'est peut-être une bonne idée de mettre à jour la réponse?
Ligne

71

Je ne crois même pas que vous deviez écrire une chaîne vide dans le fichier.

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

9
Vous avez raison à ce sujet. Toutes les réponses montrant une écriture sont fausses ou au mieux redondantes.
Marquis of Lorne

33
Que diriez-vous juste new PrintWriter("filepath.txt").close();?
Supuhstar

1
quote from java docs "Si le fichier existe, il sera tronqué à zéro"
Pinkerton

1
mais que faire si le fichier est en mode ajout.
GURMEET SINGH

Oh mec, je ne peux pas croire que j'ai raté la réponse simple. Ouvrez le fichier en mode tronqué. Je déteste tellement le mode tronqué que ça m'a glissé.

30

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


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

J'en ai besoin parce que je voudrais effacer le fichier journal créé par la bibliothèque logback-android . Si je supprime le fichier journal manuellement, la bibliothèque n'est pas assez intelligente pour la créer à nouveau s'il y a un journal à écrire jusqu'à ce que je relance mon application. Par conséquent, j'ai utilisé cette méthode et je travaille. Je n'ai pas beaucoup étudié. N'est-ce pas la meilleure approche? S'il vous plaît des conseils.
Yeung

Curieusement, j'ai un problème de production parce que la classe 10 de la carte Intenso se fige (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 montré le problème.
Poutrathor



6

Que diriez-vous ci-dessous:

File temp = new File("<your file name>");
if (temp.exists()) {
    RandomAccessFile raf = new RandomAccessFile(temp, "rw");
    raf.setLength(0);
}

5

Après avoir copié de A vers B, ouvrez à nouveau le fichier A en mode écriture, puis écrivez une chaîne vide dedans


5

L'un des meilleurs compagnons pour java est Apache Projects et veuillez vous y référer. Pour les opérations liées aux fichiers, vous pouvez vous référer au projet Commons IO .

Le code ci-dessous une ligne nous aidera à rendre le fichier vide.

FileUtils.write(new File("/your/file/path"), "")

4

Ecrivez:

FileOutputStream writer = new FileOutputStream("file.txt");

2

Ecrivez une chaîne vide dans le fichier, videz et fermez. Assurez-vous que le rédacteur de fichier n'est pas en mode ajout. Je pense que cela devrait faire l'affaire.


2

Si vous n'avez pas besoin d'utiliser l'écrivain par la suite, le moyen le plus court et le plus propre de le faire serait comme ça:

new FileWriter("/path/to/your/file.txt").close();

1

en utilisant: Nouvelle bibliothèque Java 7 NIO, essayez

        if(!Files.exists(filePath.getParent())) {
            Files.createDirectory(filePath.getParent());
        }
        if(!Files.exists(filePath)) {
            Files.createFile(filePath);
        }
        // Empty the file content
        writer = Files.newBufferedWriter(filePath);
        writer.write("");
        writer.flush();

Le code ci-dessus vérifie si Directoty existe sinon crée le répertoire, vérifie si le fichier existe est oui, il écrit une chaîne vide et vide le tampon, à la fin, vous faites pointer le rédacteur sur un fichier vide


0

Vous pouvez utiliser

FileWriter fw = new FileWriter(/*your file path*/);
PrintWriter pw = new PrintWriter(fw);
pw.write("");
pw.flush(); 
pw.close();

N'oubliez pas de ne pas utiliser

FileWriter fw = new FileWriter(/*your file path*/,true);

True dans le constructeur de filewriter activera l'ajout.


0
FileOutputStream fos = openFileOutput("/*file name like --> one.txt*/", MODE_PRIVATE);
FileWriter fw = new FileWriter(fos.getFD());
fw.write("");

Bienvenue à SO! Veuillez utiliser les outils de mise en forme intégrés pour rendre votre code plus facile à lire.
Michael L.

0

Avec try-with-resources, l’écrivain sera automatiquement fermé:

import org.apache.commons.lang3.StringUtils;
final File file = new File("SomeFile");
try (PrintWriter writer = new PrintWriter(file))  {
    writer.print(StringUtils.EMPTY);                
}
// here we can be sure that writer will be closed automatically

0

Tout ce que vous avez à faire est d'ouvrir le fichier en mode tronqué. Toute classe de sortie de fichier Java le fera automatiquement pour vous.


-2

vous pouvez écrire une méthode générique comme (c'est trop tard mais le code ci-dessous vous aidera / les autres)

public static FileInputStream getFile(File fileImport) throws IOException {
      FileInputStream fileStream = null;
    try {
        PrintWriter writer = new PrintWriter(fileImport);
        writer.print(StringUtils.EMPTY);
        fileStream = new FileInputStream(fileImport);
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            writer.close();
        }
         return fileStream;
}

5
Cela ne crée pas un fichier vide, cela crée un fichier avec un octet nul.
Marquis of Lorne
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.