一、FileInputStream()的使用步骤
第一步:
1:打开流(即创建流)
第二步:
2:通过流读取内容
第三步:
3:用完后,关闭流资源
显然流是Java中的一类对象,要打开流其实就是创建具体流的对象,由于是读取硬盘上的文件,应该使用输入流。所以找到了InputStream类,但是InputStream是抽象类,需要使用它的具体实现类来创建对象就是FileInputStream。通过new 调用FileInputStream 的构造方法来创建对象。发现FileInputStream的构造方法需要指定文件的来源。查看构造方法,可以接受字符串也可以接受File对象。我们通过构建File对象指定文件路径。
使用流就像使用水管一样,要打开就要关闭。所以打开流和关闭流的动作是比不可少的。如何关闭流?使用close方法即可,当完成流的读写时,应该通过调用close方法来关闭它,这个方法会释放掉十分有限的操作系统资源.如果一个应用程序打开了过多的流而没有关闭它们,那么系统资源将被耗尽.
二、如何通过流读取内容?
查找api文档通过read方法,查看该方法,发现有返回值,并且是int类型的,该方法一次读取一个字节(byte)
输入流读取方式1:
read方法()
一次读取一个字节,读到文件末尾返回-1.
仔细查看api文档发现read方法如果读到文件的末尾会返回-1。那么就可以通过read方法的返回值是否是-1来控制我们的循环读取。
//一次只能读取一个字节
public static void readTest1() throws IOException{
//找到目标
File file=new File("E:\A.txt");
//建立数据的输入管道
FileInputStream fileInputStream=new FileInputStream(file);
//开始读数据
int context=0;
while((context=fileInputStream.read())!=-1){
System.out.println((char)context);//一次只能读一个字节
}
//关闭资源
fileInputStream.close();
}
输入流读取方式2:
使用read(byte[] b) 方法。使用缓冲区(关键是缓冲区大小的确定)
使用read方法的时候,流需要读一次就处理一次,可以将读到的数据装入到字节数组中,一次性的操作数组,可以提高效率。
问题1:缓冲区大小
那么字节数组如何定义?定义多大?
通过read方法,往byte数组中存内容,那么该read方法返回的是往数组中存了多少字节。
//使用缓冲 数组 读取 缺点:无法读取完整一个文件的数据
public static void readTest2() throws IOException{
//找到目标文件
File file=new File("E:\A.txt");
//建立数据的输入通道
FileInputStream fileInputStream=new FileInputStream(file);
//建立缓冲字节数组,读取文件的数据
int length=0;
//缓冲数组的大小一般是1024的倍数,因为与计算机的处理单位有关
//理论上,数组越大,效率越高
byte[] buf=new byte[3];//相当于超市里边的购物车
while((length=fileInputStream.read(buf))!=-1){
//如果使用read读取数据传入到了字节数组,数据是存储到字节数组中的,read方法的返回值表示的是 本次读取了几个字节数据到字节数组中。
String string=new String(buf,0,length);//一定要使用0,length。因为数组采用的是覆盖,不限定范围,就会出现内容错误。
System.out.print("内容为"+string);
}
//关闭资源
fileInputStream.close();
}