黑马程序员技术交流社区
标题:
IO 问题 fr.read(cha)和使用int型接收的问题
[打印本页]
作者:
柳超
时间:
2014-7-21 09:41
标题:
IO 问题 fr.read(cha)和使用int型接收的问题
<p>//用字符流复制一个文件
import java.io.*;
class FileReaderTest
{
public static void main(String[] args)
{
FileReader fr= null;
FileWriter fw=null;
try
{
fr=new FileReader("fortask.java"); //创建字符读取流
fw=new FileWriter("fortasek_copy.java");//创建字符输入流
char[] cha=new char[1024]; //定义字符数组,完成输入输出流
int length; //第三方变量保存字符数组使用的长度
while((length=fr.read(cha))!=-1)
{
fw.write(cha,0,(fr.read(cha)));//这里fr.read(cha)如果不使用length就会出错
//想请教 使用length 和 fr.read(cha)有什么区别 都是Int型大小也相同
}
}
catch (IOException e)
{
}
finally
{
try//关闭字符读取
{
if(fr!=null)
fr.close();
}
catch (IOException e)
{
}
try//关闭字符输入
{
if(fw!=null)
fw.close();
}
catch (IOException e)
{
}
}
}
}</p><p> </p><p> </p><p> </p><p>while((length=fr.read(cha))!=-1)
{
fw.write(cha,0,(fr.read(cha)));//这里fr.read(cha)如果不使用length而是如此写就会出错
//想请教 使用length 和 fr.read(cha)有什么区别 都是Int型大小也相同 为什么文中写的运行会出错
}
</p>
复制代码
作者:
柳超
时间:
2014-7-21 09:57
没有人解答
自顶一下
作者:
lancerjs
时间:
2014-7-21 10:16
你每调用一次fr.read(cha)的时候都会把一组新的数据存入字符数组,当最后一次进入循环的时候,在while循环条件中调用fr.read(cha)把剩余的字符读完了,你在循环体中再次调用fr.read(cha),返回值是-1,程序当然报错了,如果使用length,就能保证每次循环只调用一次fr.read(cha).
作者:
黑马-蒋振军
时间:
2014-7-21 10:17
因为你调用了Read();方法 是会读入数据的,具体参考API
作者:
柳超
时间:
2014-7-21 10:34
lancerjs 发表于 2014-7-21 10:16
你每调用一次fr.read(cha)的时候都会把一组新的数据存入字符数组,当最后一次进入循环的时候,在while循环条 ...
也就是説fr.read(cha)每次出现都会执行,而在循环中写就有可能导致,判断条件没有起做用!
而下面的返加结果是-1 indexoutof 这个异常!
fr.read(cha) 説白了 就肯 是 it.next 一个性质!
如果是这样 我觉得我明白 了
作者:
阿磊
时间:
2014-7-21 10:46
简单说就是你fw.write(cha,0,(fr.read(cha)))中(fr.read(cha)不简单是长度int的问题,他也执行了读取的方法,相当于你while循环执行了i两次,就算让你编译通过,文件也复制不过来。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2