黑马程序员技术交流社区

标题: IO复制文件问题,求教 [打印本页]

作者: 马超(Andy)    时间: 2014-8-22 11:11
标题: IO复制文件问题,求教
刚开始看IO流,开始复制文件的练习就出问题了
使用字符数组做缓存的方法,不知道哪里出了问题 报脚标越界异常,具体如下  
求解啊


import java.io.*;
class IOTest
{
        public static void main(String[] args)
        {
                copy("F:\\Language\\Heima\\IO\\MyDemo.txt","F:\\Language\\Heima\\MyDemo.txt");
       
        }
         //复制文件,方法二,使用字符数组作为缓冲
         public static void copy(String outFileName,String inFileName)
        {
                 //读取流指向
                 FileReader fr =null;
                 // 输入流指向
                 FileWriter fw = null;

                 //定义缓冲字符数组
                 char[] temp = new char[100];
                 try
                 {
                        fr = new FileReader(outFileName);
                 
                        fw = new FileWriter(inFileName);
                 }
                 catch (IOException e)
                 {
                         System.out.println(e.toString());
                 }

                 try
                 {
                        int len = 0;
                       
                        while((len = fr.read(temp)) != -1);
                        {
                               
                                 fw.write(temp,0,len);       //这里到底出了神马问题??????:'(
                        }
                 }
                 catch ( IOException e)
                 {
                         throw new RuntimeException("读取异常");
                 }

                 finally
                {
                        if (fr != null)
                        {
                                try
                                {
                                        fr.close();
                                }
                                catch (IOException e)
                                {
                                        System.out.println(e.toString());
                                }
                               
                        }
                        if (fw != null)
                        {
                                try
                                {
                                        fw.close();
                                }
                                catch (IOException e)
                                {
                                        System.out.println(e.toString());
                                }
                               
                        }
                       
                }
               
               

        }
}

编译没问题,运行脚标越界异常:
异常如下:
F:\Language\Heima\IO>java IOTest
Exception in thread "main" java.lang.IndexOutOfBoundsException
        at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:121)
        at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
        at IOTest.copy(IOTest.java:37)
        at IOTest.main(IOTest.java:6)



作者: 初升的晨曦    时间: 2014-8-22 11:58
  while((len = fr.read(temp)) != -1);  


你应该这句话出错误了,FilterReader的read方法,一共有两个,一个是不带参数的,一个字符一个字符的读.
一个三个参数的.第一个参数是你要存储的目标缓冲区,就是数组,第二个是从什么位置开始读取,第三个是读取得字符数.


我也不是很确定你是否这句出错误了,你再仔细检查一下.

作者: 马超(Andy)    时间: 2014-8-22 12:24
我去,找到原因了,疯了,多个分号:@:@:@:@:@
while((len = fr.read(temp)) != -1);  <---这个东西
                       
作者: java_dream    时间: 2014-8-22 12:51
代码有问题,while循环处多了一个分号";"。

answer.png (6.22 KB, 下载次数: 40)

answer.png

作者: 马超(Andy)    时间: 2014-8-22 13:13
java_dream 发表于 2014-8-22 12:51
代码有问题,while循环处多了一个分号";"。

:handshake 哎,就是  谢啦
作者: java_dream    时间: 2014-8-22 14:41
马超(Andy) 发表于 2014-8-22 13:13
哎,就是  谢啦

我发出去才看到,其实你已经找出原因了,呵呵...
作者: 七弟    时间: 2014-8-22 22:32
学习一下
作者: tommy    时间: 2014-8-22 23:33
大意不得啊,感觉LZ好悲剧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2