为什么这段代码不起作用?

时间:2016-01-09 13:46:15

标签: java

我编写了这段代码,它应该替换名为" abc.txt"的文件中的所有字符。用星号。但是,当我运行此代码时,它只是删除文件中的所有内容。请有人帮我弄清楚这里有什么问题。感谢

import java.io.*;
import java.util.*;

class Virus{

    public static void main(String[] args) throws Exception{

        File f = new File("abc.txt");
        FileReader fr = new FileReader(f);
        FileWriter fw = new FileWriter(f);
        int count = 0;
        while(fr.read()!=-1){
            count++;
        }
        while(count-->0){
            fw.write('*');
        }
        fw.flush();     
        fr.close();
        fw.close();
    }
}

4 个答案:

答案 0 :(得分:5)

您应该按顺序创建文件阅读器和编写器,而不是一次创建。

FileReader fr = new FileReader(f);
FileWriter fw = new FileWriter(f); // here you are deleting your file content before you had chance to read from it

您应该执行以下操作:

public static void main(String[] args) throws Exception{

    File f = new File("abc.txt");
    FileReader fr = new FileReader(f);
    int count = 0;
    while(fr.read()!=-1){
        count++;
    }
    fr.close();

    FileWriter fw = new FileWriter(f);
    while(count-->0){
        fw.write('*');
    }
    fw.flush();     
    fw.close();
}

答案 1 :(得分:4)

首先,您需要读取文件,然后关闭文件对象。然后开始将内容写入其中。

默认情况下,它以写入模式打开文件。在您阅读任何内容之前,所有数据都将丢失。

class Virus{

  public static void main(String[] args) throws Exception{

    File f = new File("/Users/abafna/coding/src/abc.txt");
    FileReader fr = new FileReader(f);
    int count = 0;
    while(fr.read()!=-1){
      count++;
    }
    fr.close();
    System.out.println(count);
    FileWriter fw = new FileWriter(f);
    while(count-->0){
      fw.write('*');
    }
    fw.flush();
    fw.close();
  }
}

答案 2 :(得分:1)

Using FileWriter fw = new FileWriter(f);

这会清除文件的内容。 这是因为您使用的FileWriter的构造函数会截断文件(如果文件已存在)。

如果您想要追加数据,请使用:

new FileWriter(theFile, true);

答案 3 :(得分:1)

正如其他人所说的那样,你在创建FileWriter时正在格式化文件,但是你也没有理由去读取文件。

public static void main(String[] args) throws Exception {
    File f = new File("abc.txt");
    long length = f.length(); //length of file. no need to read it.
    OutputStream out = new BufferedOutputStream(new FileOutputStream(f));
    for (int i = 0; i < length; i++) {
        out.write('*');
    }
    out.close();
}