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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐君 中级黑马   /  2013-11-26 11:48  /  1453 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 徐君 于 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));
        }

}

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

3 个回复

倒序浏览
你的这个是属于最后一步出的问题,如果文件中不存在内容,则返回-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);
回复 使用道具 举报
不知道你具体想问什么,只是看着你的代码有问题,不完善。我是这样写的:
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();
               
        }

}

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
楼主的代码没有错。
从楼主的代码可以看出,是要从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这个文件中有内容才行。


评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马