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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 葛奎 中级黑马   /  2012-10-29 18:43  /  4493 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

private static void readFile_3() {
        FileInputStream fis = null;
        try {
                fis = new FileInputStream("d:\\heimaio\\FileStream.txt");
                //int len = fis.available();
                byte[] buf=new byte[fis.available()];
                fis.read(buf);
                //System.out.println(new String(buf,0,len));
                                System.out.println(new String(buf,0,fis.available()));
用打上注释的方法读,就能读取出数据。
为什么直接调用fis.available()就读不出来了呢?什么数据都没有,显示是空的  帮忙解决下

        } catch (FileNotFoundException e) {
                e.printStackTrace();
        } catch (IOException e) {
                e.printStackTrace();
        }finally{
                if(fis!=null){
                        try {
                                fis.close();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
        }
}

评分

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

查看全部评分

2 个回复

倒序浏览
本帖最后由 王威 于 2012-10-29 19:17 编辑

错误很明显
private static void readFile_3() {
        FileInputStream fis = null;
        try {
                fis = new FileInputStream("d:\\heimaio\\FileStream.txt");
                //int len = fis.available();
                byte[] buf=new byte[fis.available()];//这一句肯定可以执行,也可以获取fis.available() 的值
                fis.read(buf);
                //System.out.println(new String(buf,0,len));
                                System.out.println(new String(buf,0,fis.available()));//当你执行到这一句的时候流已经读到末尾了,所以 fis.available() 读出来的值是0,不信你可以在这个地方打印 fis.available()  
用打上注释的方法读,就能读取出数据。
为什么直接调用fis.available()就读不出来了呢?什么数据都没有,显示是空的  帮忙解决下

        } catch (FileNotFoundException e) {
                e.printStackTrace();
        } catch (IOException e) {
                e.printStackTrace();
        }finally{
                if(fis!=null){
                        try {
                                fis.close();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
        }
}

再让你看看jdk的API中available() 方法的介绍:

这里是读取剩余字节数










评分

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

查看全部评分

回复 使用道具 举报
因为数据读取结束后读取数据的指针也就指向到了最后
在调用available方法的返回值就是0了
也就是你的输出语句是输出 0到0 之间的数据 也就是没有输出
把输出语句改下吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马