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