FileInputStream
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FileInputStream相关的知识,希望对你有一定的参考价值。
一、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(); }
以上是关于FileInputStream的主要内容,如果未能解决你的问题,请参考以下文章