java初学者提问: 下面这个小程序是什么问题 为什么被写入的a.txt巨大无比而不是1.txt里的内容

import java.io.*;
public class TestCopy{
public static void main(String[] args){
int b = 0;
FileReader fr = null;
FileWriter fw = null;
try{
fr = new FileReader("a://java//1//2.txt");
fw = new FileWriter("a://java//1//a.txt");
b = fr.read();
while(b!= -1){
fw.write(b);
}
fr.close();
fw.close();
}
catch(FileNotFoundException e){
System.out.println("未找到文件");
}
catch(IOException e1){
System.out.println("文件读写错误");
}
System.out.println("文件已copy");
}
}

代码的问题啊。
看看
fw = new FileWriter("a://java//1//a.txt");
b = fr.read(); 读取第一字符 执行一次fr.read()方法读取一个字符。读全文需要循环执行的。

while(b!= -1){
fw.write(b); 把b写入文件 但是有没有读取新的b的值。b就没有变化一直都是最初的不是-1的值。这样会不停的向文件a.txt写入第一个字符的。

}
fr.close();
fw.close();
这样写的结果是读取第一个字符并且将字符不停的循环写入文件。
正确的写法
fw = new FileWriter("a://java//1//a.txt");
b=2;
while(b!= -1){
b = fr.read();
fw.write(b);
}
fr.close();
fw.close();

或者
fw = new FileWriter("a://java//1//a.txt");
while((b = fr.read())!= -1){
fw.write(b);
}
fr.close();
fw.close();

都行。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-27
b = fr.read();
while(b!= -1){
fw.write(b);
}
这段有问题,你只读了第一个数,是个死循环,所以写的文件特别大
改为
b = fr.read();
while(b!= -1){
fw.write(b);
b=fr.read();//每写一个后需要再读下一个
}本回答被网友采纳
第2个回答  2012-10-27
while循环的地方出问题了,你的b!=-1这个条件一直是true,这是个死循环,你得读一次判断一次
while(b!= -1){
fw.write(b);
b=fr.read();//这样b的值才会变化
}
源程序里的b读了一次就不在变化了,所以是个死循环

Warning: Invalid argument supplied for foreach() in /www/wwwroot/aolonic.com/skin/templets/default/contents.html on line 45
相似回答
大家正在搜