当前位置: 代码迷 >> 综合 >> JavaSE基础(120) FileInputStream(字节流-文件输入流)读取文件内容
  详细解决方案

JavaSE基础(120) FileInputStream(字节流-文件输入流)读取文件内容

热度:39   发布时间:2023-12-13 15:08:09.0

FileInputStream :从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。

FileInputStream :用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader

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

FileInputStream(File file)
          通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream(FileDescriptor fdObj)
          通过使用文件描述符 fdObj 创建一个 FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。
FileInputStream(String name)
          通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

第二步:读取文件内容    怎么读取?? ==》 通过FileInputStreamread方法

 int

read()
          从此输入流中读取一个数据字节。

返回:下一个数据字节;如果已到达文件末尾,则返回 -1

 int

read(byte[] b)
          从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。

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

参数:

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

 int

read(byte[] b, int off, int len)
          从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。

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

参数:

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

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

  len - 读取的最大字节数。

第三步:关闭流


ex:

/*** 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 {public static void main(String[] args) throws IOException {// TODO Auto-generated method stubFile 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){System.out.print((char)read);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) {System.out.print(new String(b,0,len));//String(byte[] bytes, int offset, int length):通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。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();}}

 

  相关解决方案