FileInputStream :从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。
    FileInputStream :用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。


    第一步: 创建输入流对象 怎么创建?? ==》通过FileInputStream的构造方法创建

    FileInputStream(File file)
    通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
    FileInputStream(FileDescriptor fdObj)
    通过使用文件描述符 fdObj 创建一个 FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。
    FileInputStream(String name)
    通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
    第二步:读取文件内容 怎么读取?? ==》 通过FileInputStream的read方法


    int read()

    1. 从此输入流中读取一个数据字节。<br />返回:下一个数据字节;如果已到达文件末尾,则返回 -1

    int read(byte[] b)

    1. 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。<br />返回:读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。<br />参数:<br />b - 存储读取数据的缓冲区。

    int read(byte[] b, int off, int len)

    1. 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。<br />返回:读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。<br />参数:<br /> b - 存储读取数据的缓冲区。<br /> off - 目标数组 b 中的起始偏移量。<br /> len - 读取的最大字节数。

    第三步:关闭流

    /**

    • FileInputStream(字节流-文件输入流) 读取文件内容:

    • 1.创建输入流对象 怎么创建?? ==》通过FileInputStream的构造方法创建

    • ①FileInputStream(File file):通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。

    • ②FileInputStream(FileDescriptor fdObj):通过使用文件描述符 fdObj 创建一个 FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。

    • ③FileInputStream(String name):通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

    • 2.读取文件内容 怎么读取?? ==》 通过FileInputStream的read方法

    • ①int read():从此输入流中读取一个数据字节。 (如果已到达文件末尾,则返回 -1。 )

    • ②int read(byte[] b) :从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 (如果因为已经到达文件末尾而没有更多的数据,则返回 -1。)

    • ③int read(byte[] b, int off, int len) :从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。 (如果因为已经到达文件末尾而没有更多的数据,则返回 -1。)

    • 3.关闭流

    • @author 郑清

    */

    public class Demo {

    1. public static void main(String[] args) throws IOException {

    // TODO Auto-generated method stub

    File file = new File(“D:1/1.txt”);//指定路径

    //1.创建一个与磁盘文件建立连接的字节输入流

    FileInputStream fis = new FileInputStream(file);

    //2.读取文件内容

    //方式①:int read():从此输入流中读取一个数据字节。 (如果已到达文件末尾,则返回 -1。 )

    int read = fis.read();//返回第一个字节 保存到read里

    while(read != -1){

    1. System.out.print((char)read);
    2. read = fis.read();//当未读取到文件末尾时 继续读取下一个字节

    }

    //方式②:int read(byte[] b) :从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 (如果因为已经到达文件末尾而没有更多的数据,则返回 -1。)

    byte[] b = new byte[3];

    int len = fis.read(b);//返回前3个字节 保存到len里 注意:每次读取的数据都是存入了b数组中:下次读取的有效的字节数,会覆盖上次的数据

    while(len != -1) {

    1. System.out.print(new String(b,0,len));//String(byte[] bytes, int offset, int length):通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。
    2. len = fis.read(b);//当未读取到文件末尾时 继续读取下3个字节

    }

    /*

    • 方式③:int read(byte[] b, int off, int len) :从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。如果 len 不为 0,则在输入可用之前,该方法将阻塞;否则,不读取任何字节并返回 0。

    • 返回:读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。

    • 参数:

    • b - 存储读取数据的缓冲区。

    • off - 目标数组 b 中的起始偏移量。

    • len - 读取的最大字节数。

      */

      byte[] b2 = new byte[5];

      int len2 = fis.read(b2,0,5);//返回从起始位置0开始的5个字节 保存到read里 注意:每次读取的数据都是存入了b2数组中:下次读取的有效的字节数,会覆盖上次的数据

      while(len2 != -1) {

      System.out.print(new String(b2,0,len2));

      len2 = fis.read(b2,0,5);//当未读取到文件末尾时 继续读取接下来的5个字节

      }

    //3.关闭流

    fis.close();

    1. }

    }

    ————————————————
    版权声明:本文为CSDN博主「郑清」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_38225558/article/details/82494656