A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马超(Andy) 中级黑马   /  2014-8-22 11:11  /  1580 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

刚开始看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)


7 个回复

倒序浏览
  while((len = fr.read(temp)) != -1);  


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


我也不是很确定你是否这句出错误了,你再仔细检查一下.
回复 使用道具 举报
我去,找到原因了,疯了,多个分号:@:@:@:@:@
while((len = fr.read(temp)) != -1);  <---这个东西
                       
回复 使用道具 举报
代码有问题,while循环处多了一个分号";"。

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

answer.png
回复 使用道具 举报
java_dream 发表于 2014-8-22 12:51
代码有问题,while循环处多了一个分号";"。

:handshake 哎,就是  谢啦
回复 使用道具 举报

我发出去才看到,其实你已经找出原因了,呵呵...
回复 使用道具 举报
七弟 中级黑马 2014-8-22 22:32:46
7#
学习一下
回复 使用道具 举报
tommy 中级黑马 2014-8-22 23:33:29
8#
大意不得啊,感觉LZ好悲剧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马