在java中覆盖txt文件

Kar*_*nan 32 java overwrite filewriter

我写的代码应该覆盖所选文本文件的内容,但它会附加它.我究竟做错了什么?

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();
}           
Run Code Online (Sandbox Code Playgroud)

编辑

我尝试制作一个新的temp.txt文件并将新内容写入其中,删除此文本文件并将temp.txt重命名为此文件.事实是,删除总是不成功.我不认为我必须为此更改用户权限吗?

此外,我的程序的一部分列出了该目录中的所有文件,因此我猜测它们正在被程序使用,因此无法删除.但为什么不覆盖?

解决了

我最大的"D'哦"时刻!我一直在Eclipse上编译它而不是cmd,这是我执行它的地方.所以我新编译的类转到bin文件夹,通过命令提示符编译的类文件在我的src文件夹中保持不变.我用我的新代码重新编译,它就像一个魅力.

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();
}           
Run Code Online (Sandbox Code Playgroud)

小智 24

你的代码对我来说很好.它按预期替换了文件中的文本,但没有追加.

如果要追加,请在其中设置第二个参数

new FileWriter(fnew,false);
Run Code Online (Sandbox Code Playgroud)

为真;


Kar*_*nan 6

解决了

我最大的“ D'oh”时刻!我一直在Eclipse上而不是在我执行它的cmd上编译它。因此,我新编译的类进入了bin文件夹,并且通过命令提示符编译的类文件在我的src文件夹中保持不变。我重新编译了我的新代码,它就像一个魅力。

                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();
            }   
Run Code Online (Sandbox Code Playgroud)


And*_*ler 5

初始化文件对象后再添加一行

File fnew = new File("../playlist/" + existingPlaylist.getText() + ".txt");
fnew.createNewFile();
Run Code Online (Sandbox Code Playgroud)

  • @ALJIMohamed 不,`new File` 只是创建代表文件抽象概念的 Java 对象。否则,使用 `exists()` 方法是没有意义的,因为文件总是在 `new File` 之后存在。 (7认同)