Java之FileInputStream(字节流-文件输入流)读取文件内容

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38225558/article/details/82494656

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 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){
		    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();
	}

}

猜你喜欢

转载自blog.csdn.net/qq_38225558/article/details/82494656
今日推荐