黑马程序员技术交流社区
标题:
IO 文件复制问题
[打印本页]
作者:
邱成
时间:
2012-9-15 07:33
标题:
IO 文件复制问题
import java.io.*;
public class TestCopy{
public static void main(String[] args){
try{
FileReader fr=new FileReader("E:/Hello.txt");
FileWriter fw=new FileWriter("E:/ying.txt");
while(fr.read()!=-1)
{
fw.write(fr.read());
}
fr.close();
fw.close();
}
catch(FileNotFoundException ne){
System.out.println("找不到指定的文件");
System.exit(-1);
}
catch(IOException ie){
System.out.println("文件读取错误");
System.exit(-1);
}
System.out.println("文件已经复制");
}
}
//我事先在E盘建立了一个Hello.txt文档,但是运行程序之后,E盘中生成的文件ying.txt里的内容和Hello.txt中的内容不同
作者:
叶征东
时间:
2012-9-15 08:55
import java.io.*;
public class TestCopy{
public static void main(String[] args){
try{
FileReader fr=new FileReader("E:/Hello.txt");
FileWriter fw=new FileWriter("E:/ying.txt");
/*
while(fr.read()!=-1)//你'这个while语句是有问题的,假如文件中的内容是"12345";在while(fr.read()!=-1)中读取到"1"时,为true,执行fw.write(fr.read());但是在fw.write(fr.read())中是把"2"写入了,因为在 f w.write(fr.read())中fr.read()又往下读取了一个字符,也就是说读取两个字符,只写入了一个字符.
{
fw.write(fr.read());
}
*/
我改了下,试了是有用的,你试试:
int len = 0;
char[] buf = new char[1024];
while((len=fr.read(buf))!=-1){
fw.write(buf,0,len);
}
只要把原来
while语句部分替换就可以了
fr.close();
fw.close();
}
catch(FileNotFoundException ne){
System.out.println("找不到指定的文件");
System.exit(-1);
}
catch(IOException ie){
System.out.println("文件读取错误");
System.exit(-1);
}
System.out.println("文件已经复制");
}
}
//我事先在E盘建立了一个Hello.txt文档,但是运行程序之后,E盘中生成的文件ying.txt里的内容和Hello.txt中的内容不同
作者:
佟亚鹏
时间:
2012-9-15 09:08
本帖最后由 佟亚鹏 于 2012-9-15 09:09 编辑
这个很容易想,你的ying.txt比hello.txt内容少一半对吧
看看你的这段代码
while (fr.read() != -1)
复制代码
每read一次就会读取下数据,并且下标往后移动一下,你while语句里面的read的数据和write方法内的read的数据是不一样的,每次写数据时就跳过去了while语句括号内读到的数据,应该为
while((data = fr.read()) !=-1) {
fw.write(data);
}
复制代码
这样就可以了
作者:
吴通
时间:
2012-9-15 10:16
楼主:主是你的while语句有问题,
fr.read()是一个方法,
当执行到while
(fr.read()!=-1)时,可能读到的元素为a,但是
当执行到下面的fw.write(fr.read())时,就又执行了一次read方法
这时读取的元素就是下一个元素了,所以拷贝的文本有缺失
还有就是楼主的异常处理也有些问题,关闭动作是一定要执行的,
应该把关闭动作放在finally里面
下面是修改后的代码
import java.io.*;
public class TestCopy
{
public static void main(String[] args)
{
try
{
FileReader fr=new FileReader("E:/Hello.txt");
FileWriter fw=new FileWriter("E:/ying.txt");
int ch=0;
while((ch=fr.read())!=-1)
{
fw.write((char)ch);
}
}
catch(FileNotFoundException ne)
{
System.out.println("找不到指定的文件");
System.exit(-1);
}
catch(IOException ie)
{
System.out.println("文件读取错误");
System.exit(-1);
}
finally
{
try
{
if(fr!=null)
fr.close();
}
catch (IOException e)
{
}
try
{
if(fw!=null)
fw.close();
}
catch (IOException e)
{
}
}
System.out.println("文件已经复制");
}
}
作者:
任艳旭
时间:
2012-9-15 14:52
while(fr.read()!=-1)
{
fw.write(fr.read());
}
你读了两次,输入流有个指针,第一次读,指针指向第一个字符,紧接着又读第二次,指针就指向第二个字符了,所以写出的字符只是第二个,所以内容会减半!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2