java 20 - 4 IO流概述和一个简单例子解析

时间:2023-03-08 23:00:05
java 20 - 4 IO流概述和一个简单例子解析

IO流的分类:
  

 流向:

    输入流 读取数据
     输出流 写出数据
  

数据类型:
     字节流
        字节输入流 读取数据 InputStream
        字节输出流 写出数据 OutputStream
     字符流
        字符输入流 读取数据 Reader
        字符输出流 写出数据 Writer

注意:一般我们在探讨IO流的时候,如果没有明确说明按哪种分类来说,默认情况下是按照数据类型来分的。

------------------------------------割割割----------------------------------------------------

例子:

  需求:往一个文本文件中输入一句话:"hello,io"

  分析:
   A:这个操作最好是采用字符流来做,但是呢,字符流是在字节流之后才出现的,所以,先试试用字节操作。
   B:由于只是要往文件中写一句话,所以要采用字节输出流。

  

字节输出流操作步骤:
   A:创建字节输出流对象
   B:写数据
   C:释放资源

   
   要想采用字节输出流,首先要创建一个字节输出流对象 
   通过上面的分析后我们知道要使用:OutputStream
   但是通过查看API,我们发现该流对象是一个抽象类,不能实例化。
   所以,我们要找一个具体的子类。
   而我们要找的子类是什么名字的呢?这个时候,很简单,我们回想一下,我们是不是要往文件中写东西。
   文件是哪个单词:File
   然后用的是字节输出流,联起来就是:FileOutputStream
   注意:每种基类的子类都是以父类名作为后缀名。
   字节流: XxxOutputStream
        XxxInputStream
   字符流: XxxReader
        XxxWriter

查看FileOutputStream的构造方法:
     A、FileOutputStream(File file)    

File file = new File("fos.txt");
FileOutputStream fos = new FileOutputStream(file);

     B、FileOutputStream(String name)

FileOutputStream fos = new FileOutputStream("fos.txt");

两个效果一样。所以,倾向于用第二种

创建字节输出流对象了做了几件事情:
   A:调用系统功能去创建文件
   B:创建fos对象
   C:把fos对象指向这个文件

创建了字节输出流对象,接着就要往里面写入想要的字节:

由于"hello,IO"是字符串,而我们现在用的是字节流,所以要把它转成字节后再输出

fos.write("hello,IO".getBytes());
fos.write("java".getBytes());

做完这些,其实字节输出流已经完成,但是,还有最重要的一步要做:

fos.close();

释放资源(很重要)
  关闭此文件输出流并释放与此流有关的所有系统资源。
为什么一定要close()呢?
  A:让流对象变成垃圾,这样就可以被垃圾回收器回收了(若fos没有close,则fos流对象可以继续使用)
  B:通知系统去释放跟该文件相关的资源