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();
        
        
    }
原文地址:https://www.cnblogs.com/lyjs/p/4995999.html