我编写了这段代码,它应该替换名为" 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();
}
}
答案 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();
}