zoukankan      html  css  js  c++  java
  • 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();
            
            
        }
    复制代码
  • 相关阅读:
    48. Rotate Image
    47. Permutations II
    46. Permutations
    45. Jump Game II
    44. Wildcard Matching
    43. Multiply Strings
    42. Trapping Rain Water
    41. First Missing Positive
    40. Combination Sum II
    39. Combination Sum
  • 原文地址:https://www.cnblogs.com/stsinghua/p/6407072.html
Copyright © 2011-2022 走看看