web-dev-qa-db-fra.com

Écraser le fichier txt dans java

Le code que j'ai écrit est supposé écraser le contenu du fichier texte sélectionné, mais l'ajoute. Qu'est-ce que je fais mal, exactement?

File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
String source = textArea.getText();
System.out.println(source);
FileWriter f2;

try {
    f2 = new FileWriter(fnew,false);
    f2.write(source);
    /*for (int i=0; i<source.length();i++)
    {
        if(source.charAt(i)=='\n')
            f2.append(System.getProperty("line.separator"));
        f2.append(source.charAt(i));
    }*/
    f2.close();
} catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
}           

MODIFIER

J'ai essayé de créer un nouveau fichier temp.txt et d'y écrire le nouveau contenu, de supprimer ce fichier texte et de renommer temp.txt en celui-ci. La chose est, la suppression est toujours infructueuse. Je ne pense pas devoir modifier les autorisations des utilisateurs pour cela.

En outre, une partie de mon programme répertorie tous les fichiers de ce répertoire. Par conséquent, je suppose qu'ils sont utilisés par le programme et ne peuvent donc pas être supprimés. Mais pourquoi ne pas écraser?

Résolu

Mon plus grand moment "D'oh"! Je l'ai compilé sur Eclipse plutôt que sur cmd, où je l'exécutais. Ainsi, mes classes nouvellement compilées sont allées dans le dossier bin et le fichier de classe compilé via la commande Invite est resté le même dans mon dossier src. J'ai recompilé avec mon nouveau code et cela fonctionne à merveille.

File fold=new File("../playlist/"+existingPlaylist.getText()+".txt");
fold.delete();
File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
String source = textArea.getText();
System.out.println(source);

try {
    FileWriter f2 = new FileWriter(fnew, false);
    f2.write(source);
    f2.close();
} catch (IOException e) {
    e.printStackTrace();
}           
29

Résolu

Mon plus grand moment "D'oh"! Je l'ai compilé sur Eclipse plutôt que sur cmd, où je l'exécutais. Ainsi, mes classes nouvellement compilées sont allées dans le dossier bin et le fichier de classe compilé via la commande Invite est resté le même dans mon dossier src. J'ai recompilé avec mon nouveau code et cela fonctionne à merveille.

                File fold=new File("../playlist/"+existingPlaylist.getText()+".txt");
            fold.delete();
            //File temp=new File("../playlist/temp.txt");
            File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
            String source = textArea.getText();
            System.out.println(source);
            /*FileWriter f2;
            PrintWriter pw;

            try {
                f2 = new FileWriter(fnew,false);
                pw= new PrintWriter(f2);
                f2.write(source);
                /*for (int i=0; i<source.length();i++)
                {
                    if(source.charAt(i)=='\n')
                        f2.append(System.getProperty("line.separator"));
                    f2.append(source.charAt(i));
                }*/


            try {
                FileWriter f2 = new FileWriter(fnew, false);
             f2.write(source);
                f2.close();
                //fnew.renameTo(fold);
                //fold.renameTo(temp);
                //temp.deleteOnExit();

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }   
4

Votre code fonctionne bien pour moi. Il a remplacé le texte dans le fichier comme prévu et n'a pas été ajouté.

Si vous voulez ajouter, vous définissez le deuxième paramètre dans

new FileWriter(fnew,false);

à vrai;

22
user1757442

Ajouter une ligne supplémentaire après l'initialisation de l'objet de fichier

File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
fnew.createNewFile();
4
Android Killer

Cela le simplifie un peu et il se comporte comme vous le souhaitez.

FileWriter f = new FileWriter("../playlist/"+existingPlaylist.getText()+".txt");

try {
 f.write(source);
 ...
} catch(...) {
} finally {
 //close it here
}
1
nullpotent

La méthode la plus simple pour écraser un fichier texte consiste à utiliser un champ statique public.

cela écrasera le fichier à chaque fois parce que vous n'utiliserez que faux la première fois.

public static boolean appendFile;

Utilisez-le pour ne permettre qu'une seule fois dans la séquence d'écriture que le champ d'ajout du code d'écriture soit faux.

// use your field before processing the write code

appendFile = False;

File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
String source = textArea.getText();
System.out.println(source);
FileWriter f2;

try {
     //change this line to read this

    // f2 = new FileWriter(fnew,false);

    // to read this
    f2 = new FileWriter(fnew,appendFile); // important part
    f2.write(source);

    // change field back to true so the rest of the new data will
    // append to the new file.

    appendFile = true;

    f2.close();
 } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
 }           
1
user7471800