黑马程序员技术交流社区
标题:
一个关于读写字符流的小问题
[打印本页]
作者:
王红潮
时间:
2012-9-22 10:52
标题:
一个关于读写字符流的小问题
本帖最后由 王红潮 于 2012-9-23 10:20 编辑
//在D盘创建一个文件,用于存储C盘文件中的数据
import java.io.*;
class CopyFileTest
{
public static void main(String[] args)throws IOException
{
copy_2();
}
public static void copy_2()
{
FileWriter fw = null;
FileReader fr = null;
try
{
fw = new FileWriter("FileReaderTest1.java");
fr = new FileReader("OutputFactory.java");
char[] ch = new char[1024];//要是文件比1024还大,为什么还能读出来?
int len = 0;
while ((len=fr.read(ch))!=-1)
fw.write(ch,0,len);
}
catch (IOException e)
{
throw new RuntimeException("读写失败!");
}
finally
{
if (fr!=null)
try
{
fr.close();
}
catch (IOException e)
{
throw new RuntimeException("文件读取失败!");
}
if (fw!=null)
try
{
fw.close();
}
catch (IOException e)
{
throw new RuntimeException("文件写入失败!");
}
}
}
}
//字符数组定义的大小是1024,可当循环1024完成后,它还会继续往下读取,数组是怎么继续往下自动读取文本数据的?
复制代码
作者:
张 涛
时间:
2012-9-22 11:17
while ((len=fr.read(ch))!=-1)
fw.write(ch,0,len);
}
你写的不是循环读取吗
作者:
张忠豹
时间:
2012-9-22 11:26
while ((len=fr.read(ch))!=-1)
fw.write(ch,0,len);
不错,ch的长度确实是1024个字符,但是你有没有看到这是一个while循环,只要循环条件满足,就会继续往下循环,而且这儿的ch只是中间量,后面的会覆盖前面,举个例子:
就像 int i = 9;
但是 我们可以通过一系列的操作来改变 i 的值 比如有一个方法 对其进行+n操作,最后i的值是会改变的哦
作者:
冯伟
时间:
2012-9-22 14:36
while ((len=fr.read(ch))!=-1)
这个语句会循环读取文件中的数据,读取一次后写入另一个文件,写完后再读取一次,就这样循环读取,后面读取的数据会覆盖前面读取的数据,一直到读取的字符为空时会返回-1结束循环
作者:
hello_world!
时间:
2012-9-22 14:45
说明两点,你就明白了。
第一、输入流将读入的数据,放在数组里面;输出流将数组里面的数据,写到硬盘;
第二、因为
while ((len=fr.read(ch))!=-1){
fw.write(ch,0,len);
}
有这个循环。所以,可以连续不断的读,直到读完数据为止
作者:
张小龙
时间:
2012-9-22 15:30
我注意到楼主最上面的一句 要把C盘文件复制到D盘 那你下面这两句必须得改成绝对路径了
fw = new FileWriter("FileReaderTest1.java"); //这个只是在当前文件目录下拷贝文件 不能实现楼主的功能
fr = new FileReader("OutputFactory.java");
然后下面这段:因为数组虽然只有1024长度,但是可以循环覆盖,写满了继续写就会用新的文件内容覆盖掉旧的内容了。
char[] ch = new char[1024];// 要是文件比1024还大,为什么还能读出来?
int len = 0;
while ((len = fr.read(ch)) != -1)
fw.write(ch, 0, len);
文件读取,只要是读到末尾就会返回一个-1,后面是api的原话 (读取的字符数,如果已到达流的末尾,则返回 -1 )
所以,只要没有读到末尾,数组数据就会循环被覆盖,然后再写到目标文件中。
所以,即使你定义一个只有1个长度的数组,依然可以复制完整个文件。
希望上面的回复对楼主有帮助
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2