黑马程序员技术交流社区

标题: FileInputStream用available方法出现的问题。 [打印本页]

作者: 葛奎    时间: 2012-10-29 18:43
标题: FileInputStream用available方法出现的问题。
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();
                        }
                }
        }
}
作者: 王威    时间: 2012-10-29 19:12
本帖最后由 王威 于 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() 方法的介绍:

这里是读取剩余字节数











作者: 曾浩    时间: 2012-10-29 19:13
因为数据读取结束后读取数据的指针也就指向到了最后
在调用available方法的返回值就是0了
也就是你的输出语句是输出 0到0 之间的数据 也就是没有输出
把输出语句改下吧




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