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.

brick
la source

Réponses:

134

Imprimez simplement une chaîne vide dans le fichier:

PrintWriter writer = new PrintWriter(file);
writer.print("");
writer.close();
Vlad
la source
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();
camleng
la source
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.

Ours Burleigh
la source
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
10

Une doublure pour faire une opération tronquée:

FileChannel.open(Paths.get("/home/user/file/to/truncate"), StandardOpenOption.WRITE).truncate(0).close();

Plus d'informations disponibles sur la documentation Java: https://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html

Michał
la source
+1 Pour ne pas instancier une classe d'écriture de fichier entière (et pire encore pour y écrire). Cela devrait vraiment être la réponse acceptée.
Kröw
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);
}
Sanjay Singh
la source
5

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

Rasel
la source
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"), "")
Anver Sadhat
la source
4

Ecrivez:

FileOutputStream writer = new FileOutputStream("file.txt");
Manh Vu
la source
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.

hakon
la source
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();
Markus L.
la source
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

harsha
la source
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.

Revanth Kumar
la source
0
FileOutputStream fos = openFileOutput("/*file name like --> one.txt*/", MODE_PRIVATE);
FileWriter fw = new FileWriter(fos.getFD());
fw.write("");
Harpreet Singh
la source
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
Bartek
la source
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.


la source
-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;
}
Vishal
la source
5
Cela ne crée pas un fichier vide, cela crée un fichier avec un octet nul.
Marquis of Lorne