黑马程序员技术交流社区

标题: 求改错,求指教是什么原因 [打印本页]

作者: 徐君    时间: 2013-11-26 11:48
标题: 求改错,求指教是什么原因
本帖最后由 徐君 于 2013-11-26 11:49 编辑

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;


public class InputStreamDemo {
        public static void main(String[] args) throws IOException {
                // TODO Auto-generated method stub
                File f = new File("e:"+File.separator+"text.txt");
                if(!f.exists()){
                        f.createNewFile();
                }
                Reader reader = null;
                reader = new InputStreamReader(new FileInputStream(f));
                char c[] = new char[1024];
                int len = reader.read(c);
                reader.close();
                System.out.println(new String(c,0,len));
        }

}


作者: doitforyou    时间: 2013-11-26 12:02
你的这个是属于最后一步出的问题,如果文件中不存在内容,则返回-1,len=-1;
而在new String(c,0,len)中,如果len=-1的话,则角标发生逻辑错误。改为以下代码就好,
int len = 0;
                String str = null;
                while((len=reader.read(c))!=-1){
                        str = new String(c,0,len);
                }
                reader.close();
                System.out.println(str);
作者: 帅气的冬瓜    时间: 2013-11-26 12:10
不知道你具体想问什么,只是看着你的代码有问题,不完善。我是这样写的:
public class InputStreamDemo {
        public static void main(String[] args) throws IOException {
                // TODO Auto-generated method stub
                File f = new File("e:"+File.separator+"text.txt");
                InputStreamReade reader = null;
                if(!f.exists()){
                        f.createNewFile();
                }
               int len=0;
                reader = new InputStreamReader(new FileInputStream(f));
                char c[] = new char[1024];
                while(len=reader.read(c)!=-1){
                System.out.println(new String(c,0,len));    }
                reader.close();
               
        }

}
作者: 樊志伟    时间: 2013-11-26 13:38
楼主的代码没有错。
从楼主的代码可以看出,是要从E:\test.txt文件中读取内容然后打印到控制台窗口。
这个程序有两种情况:
1,如果E:\test.txt这个文件中有内容,则这个程序运行没有问题。
2,如果E:\test.txt这个文件中没有内容。则
reader = new InputStreamReader(new FileInputStream(f));
char c[] = new char[1024];
int len = reader.read(c);
这三句话执行完,最后reader.read(c);返回的len的值是-1,
然后System.out.println(new String(c,0,len));时,
相当于System.out.println(new String(c,0,-1));,即从c数组的0脚标读到-1脚标,然后将读到的数据转换成字符串,
再打印到控制台。显然没有-1脚标,然后就会出现StringIndexOutOfBoundsException这个异常提示。
楼主是属于第二种情况。楼主得让E:\test.txt这个文件中有内容才行。







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