在java中覆盖txt文件

时间:2012-12-05 18:08:04

标签: 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();
}           

修改

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

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

解决

我最大的“D'oh”时刻!我一直在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();
}           

5 个答案:

答案 0 :(得分:20)

您的代码适用于我。它按预期替换了文件中的文本,但没有附加。

如果你想追加,你可以在

中设置第二个参数
new FileWriter(fnew,false);

为真;

答案 1 :(得分:4)

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

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

答案 2 :(得分:3)

解决

我最大的“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();
            }   

答案 3 :(得分:1)

这简化了它,它的行为与你想要的一样。

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

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

答案 4 :(得分:1)

覆盖文本文件的最简单方法是使用公共静态字段。

这会每次覆盖文件,因为你只使用false 第一次通过。

public static boolean appendFile;

使用它只允许一次通过追加字段的写序列 写代码是假的。

// 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();
 }