Java~IO流概述、分类、常用的流总结(FileInputStream&FileOutputStream、缓冲流、数据流、标准流、对象流)

IO流概述
  • 什么是IO流
    I:input
    O:output
    通过IO就可以完成硬盘文件的读和写
    硬盘中的文件加载到内存就是输入(Input)、
    内存将使用或者修改过的文件再返回给硬盘就是输出(Output)
  • IO流分类?
    有两种划分方式,一种是按照流的方向进行划分:
    输入流:以内存为参照物,往内存中去,叫输入(Input),或者叫做读(Read
    输出流:以内存为参照物,从内存中出,叫输出(Output),或者叫做写(Write
    另一种方式是按照字符读取数据方式的不同进行分类:
    字节流:按照字节的方式读取数据,一次读取1个字节byte
    就是一次读取8个二进制,这种流非常万能,能读取任何类型的文件.包括:文本文件,图片,声音文件等…
    字符流:按照字符方式进行读取数据的,一次读取一个字符,这种流是为了方便读取普通文本文件而存在的,这种流不能读取:图片、声音、视频等文件。只能读取纯文本文件,连word文件都无法读取.

Java是站在了前人的肩膀上向前眺望.更多的是应用层面的,对底层的东西了解的不多.可能C++多一些

Java中提供了哪些流?每个流的特点是什么?每个流对象上的常用方法有哪些??

  • java IO流的四大家族
    四个家族首领:
    java.io.InputStream 字节输入流
    java.io.OutputStream 字节输出流
    java.io.Reader 字符输入流
    java.io.Writer 字符输出流
    以Stream结尾都是字节流,以Reader/Wrider结尾都是字符流.
    这四个首领全是抽象类(abstract class)
  • 所有流都实现了java.io.Closeable接口,都是可关闭的.
    都有close方法
    流就像是内存和硬盘之间的管道,用完之后一定要关闭,不然会耗费(占用)很多的资源.用完流之后一定要关闭
  • 所有的输出流都实现了java.io.Flushable接口,都是可刷新的,都有flush()方法.
    输出流在最终输出之后,必须刷新一下。
    这个刷新就是将通道/管道当中剩余未输出的数据强行输出完(清空管道)
    如果没有flush()可能会导致丢失数据。
  • java.io包下需要掌握的16个流总结(部分了解即可)
    文件专属:
    java.io.FileInputStream(重点
    java.io.FileOutputStream(重点
    java.io.FileReader
    java.io.FileWriter
    转换流:(将字节流转换成字符流)
    java.io.InputStreamReader
    java.io.OutputStreamWriter
    缓冲流专属:
    java.io.BufferedReader
    java.io.BufferedWriter
    java.io.BufferedInputStream
    java.io.BufferedOutputStream
    数据流专属:
    java.io.DataInputStream
    java.io.DataOutputStream
    标准输出流:
    java.io.PrintWriter
    java.io.PrintStream (重点
    对象专属流:
    java.io.ObjectInputStream (重点
    java.io.ObjectOutputStream (重点
利用FileInputStream读取文件
  • FileInputStream是文件字节输入流,万能,任何类型的文件都可以采用这个流来读
  • 字节的方式,完成输入操作,完成读取操作(硬盘–>文件)

逐个字节读取

public static void main(String[] args)throws Exception{
   
            FileInputStream file = new FileInputStream("C:\\Test\\temp");
            int readData=file.read();
            System.out.println(readData);//第一次读取到第一个字节
            readData=file.read();
            System.out.println(readData);//第二次读取到第二个字节
            readData=file.read();
            System.out.println(readData);//没有内容会读取到-1
        }

直接将异常在main方法中抛出非常不规范,一般是try catch,如下面

    public static void main(String[] args){
   
        //如果在main方法中有编译异常,一般会try catch 不会throws抛出
        //创建文件字节输入流对象
        FileInputStream file= null;//文件路径在写入时,IDEA会自动把\变成\\
        try {
   
            file = new FileInputStream("C:\\Test\\temp");//我们在temp文件中提前写入内容:两个字母ab
            //开始读取数据
            int readData=file.read();//这个方法的返回值是:读取到的“字节”本身
            System.out.println(readData);
            readData=file.read();
            System.out.println(readData);
            //当读取到文件的末尾时,没有数据了会返回-1 继续读 还是返回-1
            readData=file.read();
            System.out.println(readData);
        } catch (FileNotFoundException e) {
   
            e.printStackTrace();
        }catch (IOException e){
   
         e.printStackTrace();
        }finally{
   
            //在finally语句块中确保流一定关闭
            if (file != null) {
   
                //关闭流的前提是,流不是空,流是null没必要关闭
                try {
   
                    file.close();
                } catch (IOException e) {
   
                    e.printStackTrace();
                }
            }
        }
    }

用循环逐个读

  public static void main(String[] args) throws Exception {
   
        FileInputStream file=new FileInputStream("C:\\Test\\temp");
        int readData=0;
        while((readData=file.read())!=-1){
   
            System.out.println(readData);
        }
        file.close();<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值