告别这种事情,没有道理可讲
—— 24.6.4
一、字节输入流的介绍以及方法的使用
1.概述:
字节输入流 InputStream,是一个抽象类
子类:FileInputStream
2.作用:
读数据,将数据从硬盘上读到内存中来
3.构造:
FileInputstream(File file)
FileInputstream(String path)
读文件只能读已有的文件,无法自动创建文件
4.方法
int read() —> 一次读一个字节,返回的是读取的字节
int read(byte[] b) —> 一次读取一个字节数组,返回的是读取的字节个数
int read(byte[] b, int off, int len) —> 一次读取一个字节数组的一部分,返回的是读取的字节个数
void close() —> 关闭资源
import java.io.FileInputStream;
public class Demo267FileInputStream {
public static void main(String[] args) throws Exception {
// method01(); // 97 98
method02(); // a b c d e
// FileInputstream(String path)
}
private static void method01() throws Exception {
// FileInputstream(File file)
FileInputStream fis = new FileInputStream("AllWillBest_Java\\1.txt");
// int read() —> 一次读一个字节,返回的是读取的字节
int data1 = fis.read();
System.out.println(data1);
// int read() —> 一次读一个字节,返回的是读取的字节
int data2 = fis.read();
System.out.println(data2);
// int read() —> 一次读一个字节,返回的是读取的字节
int data3 = fis.read();
System.out.println(data3);
// int read() —> 一次读一个字节,返回的是读取的字节
int data4 = fis.read();
System.out.println(data4);
// int read() —> 一次读一个字节,返回的是读取的字节
int data5 = fis.read();
System.out.println(data5);
// int read() —> 一次读一个字节,返回的是读取的字节
int data6 = fis.read();
System.out.println(data6);
FileInputStream fis4 = new FileInputStream("AllWillBest_Java\\1.txt");
int len;
while((len = fis4.read()) != -1){
System.out.println((char)len);
}
fis.close();
}
private static void method02() throws Exception {
FileInputStream fis = new FileInputStream("AllWillBest_Java/1.txt");
// 创建一个数组:byte[]
// 1.创建的数组相当于一个临时存储区域,我们要读取的内容会临时保存到数组中然后我们再从数组中将数据获取
// 2.数组长度定为多少,每次读取多少个,一般情况下数组长度定为1024或者1024的倍数如果剩下的字节不够数组长度了,那么就最后有多少读多少
// int read(bytell b) —> 一次读取一个字节数组,返回的是读取的字节个数
// void close() —> 关闭资源
byte[] bytes = new byte[2];
int len1 = fis.read(bytes);
System.out.println(len1);
System.out.println(new String(bytes,0,len1));
int len2 = fis.read(bytes);
System.out.println(len2);
System.out.println(new String(bytes,0,len2));
int len3 = fis.read(bytes);
System.out.println(len3);
System.out.println(new String(bytes,0,len3));
int len4 = fis.read(bytes);
System.out.println(len4);
System.out.println(new String(bytes,0,len4));
int len5 = fis.read(bytes);
System.out.println(len5);
fis.close();
}
}
问题1:一个流对象,读完之后,就不要再读了;除非重新new一个新的对象
问题2:流关闭之后,流对象不能继续使用了
5.读取-1的问题
每个文件末尾都会有一个"结束标记”,这个"结束标记"我们看不见,摸不着
而read()方法规定,如果读到了文件的结束标记,方法直接返回-1