34

我编写的代码应该覆盖所选文本文件的内容,但它正在附加它。我到底在做什么错?

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

5 回答 5

29

你的代码对我来说很好。它按预期替换了文件中的文本并且没有附加。

如果要追加,则将第二个参数设置为

new FileWriter(fnew,false);

为真;

于 2012-12-05T18:22:07.557 回答
9

解决了

我最大的“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();
}   
于 2012-12-06T00:48:03.973 回答
5

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

File fnew = new File("../playlist/" + existingPlaylist.getText() + ".txt");
fnew.createNewFile();
于 2012-12-05T18:14:15.570 回答
1

这稍微简化了它,它的行为就像你想要的那样。

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

try {
 f.write(source);
 ...
} catch(...) {
} finally {
 //close it here
}
于 2012-12-05T18:19:54.800 回答
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();
 }           
于 2017-01-26T01:06:39.233 回答