File a = new File("D:/1.txt");
FileInputStream b = new FileInputStream(a);
int c ;
while((c = b.read())!=-1){
System.out.println((char)c);
}
这里,Stream是字节流,输出为一个字节的char我也就认了,为什么是int?
百度了一下,大家说返回的int是字节数量,但是这个“字节数量”输出是我文本里的内容,不懂,大神呢

解决方案 »

  1.   

    FileInputStream的read大概有两种使用方法   1.   c=b.read(),这个是从流中读取一个字节,并以int(0~255)形式返回该字节
        2.  byte buf[] = new byte[1024];
             c=b.read(buf); 这个才是所读取的字节数,也是int,如果数据足够多的话c=1024,没那么多的话,buf有数据部分长度就是c了
      

  2.   


    FileInputStream是字节流,读出来自然是一个字节,但b.read()返回的却是int,为何不是byte呢?因为byte正好是一个字节,是一个有符号的数据,不便于处理,最主要的是它无法表示是否成功读到数据。而int的表值范围比较大,可用0~255来表示读到的字节值,而读到的若是-1,则表示没能读到数据。
      

  3.   

    学的时候说的是返回的int值是低八位有效的。返回的值说明是读到多少个字节,并且读到的字节存储到这个int值里。
      

  4.   

    首先int c=0,局部变量要初始化。
    其次,read返回的是int。因为读取的字节,如果文本中内容是-1,那么它会读到-1,但这不表示读取结束!那怎样区分文本的-1和结束标志-1呢?这时可以将byte提升为int,然后与上255取其低八位。问题就解决了!
      

  5.   


    如果文本中内容是-1,你是读不到-1的,你读的‘-’的ASCII码,再次读读到的是‘1’的ASCII码。
      

  6.   


    如果文本中内容是-1,你是读不到-1的,你读的‘-’的ASCII码,再次读读到的是‘1’的ASCII码。
    嗯,那个应该不是文本,该怎么说呢,文件以二进制字节形式来读取时读到-1,记得看视频时,让我们学着写一个read( ),当时是这样理解的!不是这样吗?
      

  7.   

    package http.hello;import java.io.FileInputStream;
    import java.io.IOException;public class Demo6 { public static void main(String[] args){
    FileInputStream fileInput = null;
    try{
    fileInput = new FileInputStream("D:\\a.txt");
    int c = 1;
    //返回的是一个8位的数字,之所以返回类型是int而不是char,因为可能返回-1,文件结束标示EOF
    while((c = fileInput.read()) != -1){
    System.out.printf("%c",c);
    }
    }catch(Exception e){
    }finally{
    try {
    fileInput.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }