如何删除文件中的现有文本

时间:2010-01-24 16:49:15

标签: java file-io

我正在为学校做作业,我正在尝试一些额外的功劳。该计划旨在证明线性和线性之间的效率差异。二进制搜索给定的整数数组大小。我有一个循环设置创建一个int [size]数组,搜索一个随机数,然后创建一个新的int [size * 2]数组。

然后将结果写入文本文件。输出写得很好,但是在编译之后&多次运行程序,输出文件有很多部分数据。

这是我的代码嵌套在try / catch块中:

File output= new File("c:\\BigOhResults.txt");
int counter=2;

if (output.canWrite() && output.exists()) {
    BufferedWriter out= new BufferedWriter(new FileWriter(output, true));
    out.write(type+" \n\n"); //writes the search type
    out.write(type+"Search Results\n\n");

    while (counter <= data.size()) {
        out.write(data.get(counter-1)+" millisecond runtime " +
        "for a "+ data.get(counter-2)+" random number " +"sample size\n");
        counter=counter+2;
    }
}

有没有什么办法可以在每次运行程序时删除该输出文件中的文本?

我这样做的原因是教授要求结果打印输出并绘制数据。我已经完成了图形要求,并且工作正常。我只想让文件打印输出与图形打印输出匹配。

4 个答案:

答案 0 :(得分:5)

FileWriter构造函数的第二个参数是“追加”,你传入的是“true”。即因为您已将其设置为true,它会将新输出附加到文件末尾。如果您传入false,它将擦除已经存在的数据并将其写入新内容。

答案 1 :(得分:4)

阅读FileWriter的文档。你想要追加。

答案 2 :(得分:3)

如前所述,[FileWriter] [1]构造函数允许您指定清除现有文本并从文件开头开始。关于代码的其他一些评论:

  • 在调用output.canWrite()之后,对output.exists()的检查是多余的,并且不需要。 output.canWrite()将检查文件是否存在以及您是否可以写入文件。
  • 不要忘记关闭BufferedWriter对象。

像这样:

if (output.canWrite()) {
    BufferedWriter out = null;
    try {
        out = new BufferedWriter(new FileWriter(output, false));
        out.write(type+" \n\n"); //writes the search type
        out.write(type+"Search Results\n\n");

        while (counter <= data.size()) {
            out.write(data.get(counter-1)+" millisecond runtime " +
              "for a "+ data.get(counter-2)+" random number " +"sample size\n");
            counter=counter+2;
        }
    } catch (IOException e) {
        // Do what you want here, print a message or something
    } finally {
        if(out != null) {
            try {
                out.close();
            } catch (IOException e) {
                // Again, do what you want here
            }
        }
    }

}

[1]:http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileWriter.html#FileWriter(java.io.File,布尔值)

答案 3 :(得分:0)

好的,所以我尝试了一些东西并且有效。这是当你有一个文件打算附加任何新文本,但你想在程序执行开始时重置/删除文件的内容。希望我有道理。

    PrintWriter pw1 = new PrintWriter(new BufferedWriter(new FileWriter("newfile.txt")));
    pw1.close(); // Make sure the first PrintWriter object name is different from the second one.

    PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("newfile.txt", true))); // PrintWriter in append-mode. When you recreate the text file with the same name, the file contents are erased because the previous object was not in append mode.
    pw.close();