FileInputStream :从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。
FileInputStream :用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。
第一步: 创建输入流对象 怎么创建?? ==》通过FileInputStream的构造方法创建
FileInputStream(File file)
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream(FileDescriptor fdObj)
通过使用文件描述符 fdObj 创建一个 FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。
FileInputStream(String name)
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
第二步:读取文件内容 怎么读取?? ==》 通过FileInputStream的read方法
int read()
从此输入流中读取一个数据字节。<br />返回:下一个数据字节;如果已到达文件末尾,则返回 -1。
int read(byte[] b)
从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。<br />返回:读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。<br />参数:<br />b - 存储读取数据的缓冲区。
int read(byte[] b, int off, int len)
从此输入流中将最多 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 {
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();
}
}
————————————————
版权声明:本文为CSDN博主「郑清」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38225558/article/details/82494656