「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。
前言
大家好,我是程序猿小白 gw_Gw,很高兴能和大家一起学习进步。
以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。
摘要
本文主要介绍FileInputStream字节输入流的基本概念和使用。
在学习FileInputStream之前,我们先来总述一下IO流我们都需要学习哪几个类。
IO流概述
流可以理解为数据的序列,有起点和终点。从磁盘读取文件到程序是输入流,把数据从程序写入磁盘属于输出流(不仅限于磁盘,只是为了方便理解)。
根据流的不同性质对流有不同的划分。
- 根据流的不同流向分为:输入流和输出流。
- 根据处理的数据类型不同分为:字节流和字符流。
下面我们就先开始学习字节输入流。
1. FileInputStream使用字节流读取文件
1.1 什么是FileInputStream
FileInputStream是java.io包下的InputStream的子类,用于读取文件。FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,优先使用 FileReader。
1.2 FileInputStream的构造方法
FileInputStream(File file)
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream(String name)
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
参数解释:
- FIle file:文件对象
- String name:文件具体路径
【实例展示】:
FileInputStream fileInputStream = new FileInputStream(new File("Study01\src\main\java\FileDemo\1.txt"));
FileInputStream fileInputStream1 = new FileInputStream("Study01\src\main\java\FileDemo\1.txt");
1.3 FileInputStream的常用方法
int read()
从此输入流中读取一个数据字节。
int read(byte[] b)
读入一个数组长度
int read(byte[] b, int off, int len)
从此输入流中从off开始,将最多 len 个字节的数据读入一个 byte 数组中。
long skip(long n)
从输入流中跳过并丢弃 n 个字节的数据。
void close()
关闭此文件输入流并释放与此流有关的所有系统资源。
继承自InputStream的方法:
void mark(int readlimit)
在此输入流中标记当前的位置。
void reset()
将此流重新定位到最后一次对此输入流调用 mark 方法时的位置。
这里主要描述read方法的使用。
首先来看这个文件中只有三个字母,我们来对它进行读取。
-
一个一个读:
System.out.println(fileInputStream.read()); System.out.println(fileInputStream.read()); System.out.println(fileInputStream.read()); System.out.println(fileInputStream.read());
发现读到文件结尾返回的是-1,所以我们可以使用循环来代替。
int b=0;
while((b=fileInputStream.read())!=-1){
System.out.println(b);
}
这里使用变量是为了来接收读取到的数据。
-
多个字节一起读:
byte[] bytes = new byte[1024]; int len=0; while((len=fileInputStream.read(bytes))!=-1){ System.out.println(len); System.out.println(new String(bytes,0,len)); }
这里使用变量len是为了得到最后的数据长度,防止最后数据不够数组长度,导致得不到正确的结果。
1.4 FileInputStream小结
FileInputStream使用步骤:
- 创建FileInputStream流对象。
- 使用read方法循环读取文件。
- 关闭流资源。
小结
以上就是我对于IO流的概述和分类以及对FileInputStream字节输入流的一些浅见,希望对读者有所帮助,如有不正之处,欢迎掘友们留言指正。