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();
            
            
        }
    复制代码
  • 相关阅读:
    Java知识点总结
    Eclipse使用中遇到的问题及解决
    Ubuntu--64位系统安装32位的库
    Ubuntu--防火墙的使用
    Ubuntu--手动配置IP地址,网关,DNS
    tcp echo_server
    模板类继承-成员变量不可访问的问题
    brpc channel -负载均衡-NamingService三者之间的关系
    头文件依赖顺序风格
    brpc namingservice的调用栈
  • 原文地址:https://www.cnblogs.com/stsinghua/p/6407072.html
Copyright © 2011-2022 走看看