Réécriture du fichier txt en java

Le code que j'ai écrit est censé remplacer le contenu du fichier texte sélectionné, mais c'est l'ajoutant. 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();
}           

EDIT

j'ai essayé de faire une nouvelle temp.txt fichier et l'écriture du nouveau contenu dans celui, la suppression de ce fichier texte et de renommer temp.txt pour celui-ci. Le truc, c'est que la suppression est toujours infructueuse. Je ne pense pas que je doive changer les permissions des utilisateurs pour ça, n'est-ce pas?

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

résolu

<!-Mon plus grand moment "D'oh"! Je l'ai compilé sur Eclipse plutôt que sur cmd où je l'exécutais. Donc mes classes nouvellement compilées sont allées dans le dossier bin et le fichier de classe compilé via l'invite de commande est resté le même dans mon dossier src. J'ai recompilé mon nouveau code et il fonctionne comme un charme.

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();
}           
24
demandé sur sunkuet02 2012-12-05 22:08:04

5 réponses

votre code fonctionne très bien pour moi. Il a remplacé le texte dans le fichier comme prévu et n'a pas l'ajouter.

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

new FileWriter(fnew,false);

true;

19
répondu user1757442 2012-12-05 18:22:07

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

File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
fnew.createNewFile();
4
répondu Android Killer 2012-12-05 18:14:15

résolu

mon plus grand moment "D'oh"! Je l'ai compilé sur Eclipse plutôt que sur cmd où je l'exécutais. Donc mes classes nouvellement compilées sont allées dans le dossier bin et le fichier de classe compilé via l'invite de commande est resté le même dans mon dossier src. J'ai recompilé avec mon nouveau code et il fonctionne comme un charme.

                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();
            }   
3
répondu Karthik Balakrishnan 2012-12-06 00:48:03

Cela 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
répondu nullpotent 2012-12-05 18:19:54

la façon la plus facile d'écraser un fichier texte est d'utiliser un champ statique public.

cela écrasera le fichier à chaque fois parce que votre seule utilisation de false le première fois à travers.`

public static boolean appendFile;

utilisez-le pour permettre une seule fois dans la séquence d'écriture pour le champ annexe de l'écriture du code pour être 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();
 }           
0
répondu user7471800 2017-01-26 01:31:42