关于IO流的笔记

目录

IO分类:

IO流的类的结构图: 4个父类(抽象类)

常用使用方法: 

案例: 把字符串写到文件中  


定义

  I/O操作主要是指使用Java完成输入(Input)和输出(Output)操作。输入是指将文件内容以数据流的形式读入内存,输出是指通过Java程序将内存中的数据写入文件。关于IO流的笔记_第1张图片


IO分类:

  1. 按方向分类: 站在程序这端来看

    • 输出流: 从程序流到文件

    • 输入流: 从文件到程序

  2. 按IO流大小分类:

    • 字节流: 每一次读写一个字节

    • 字符流: 每一次读写一个字符 


IO流的类的结构图: 4个父类(抽象类)

  • 字节输入流: InputStream: 常用的子类: FileInputStream, ObjectInputStream

  • 字节输出流: OutputStream: 常用的子类: FileOutputStream, ObjectOutputStream

  • 字符输入流: Reader 常用的子类: FileReader, BufferedReader

  • 字符输出流: Writer 常用的子类: FileWriter, BufferedWriter

输入流:读的方法read(),close()

输出流:写的方法write(),close()

常用使用方法: 

int    read()——从改输入流读取一个字节的数据。

int   read(byte[] b)——从该输入流读取最多b.leng个字节的数据作为字节数组。

int read ( byte[] b, int off, int len)——从输入流最多len字节数据为字节数组。

read() 返回值: 特殊值: -1 读到文件末尾。

write(int b):——写一个字节 

void write(byte[] b)——写一个字节数组(多个字节), 从开始位置(0),把整个字节数组内容写到文件

void write(byte[] b,int off,int len)——从字节数组b开始位置(off),写len个字节,写到文件

IO流操作的步骤:

  1. 创建IO流对象

  2. 调用读/写 方法

  3. 关闭资源


案例: 把字符串写到文件中  

import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class Demo1 {
    public static void main(String[]  args) {
        try {
            FileOutputStream fos= new FileOutputStream("F:/test/hello.txt");
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}

输出流功能: 当文件不存在, 创建文件

不能创建目录, 当文件上级目录不存在. 无法创建。

当上级目录不存在时会报以下异常

关于IO流的笔记_第2张图片

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo1 {
    public static void main(String[] args) {
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("F:/test/hello.txt");//变量赋值,先执行new FileOutputStream,出现异常会直接进入异常。
            String str = "hello java";
            byte[] b = str.getBytes();
            for (byte value : b) {
                fos.write(value);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();//找不到文件异常
        } catch (IOException e) {
            e.printStackTrace();//运行时异常
        } finally {
            try {
                //必须进行非空判断,如果不就行非空判断会报空指针异常,因为fos被赋值为null,掉用close会出错。
                if (fos != null) {
                    fos.close(); //使用变量
                }
            } catch (IOException e) {
                e.printStackTrace();//处理编译时异常
            }
        }
    }
}

注意的点: 

        在调用close方法时要将其写入finally里面,这是因为在创建FileOutputStream对象时,可能会出现异常,直接跳到异常处理,导致后面close方法不执行了,所以写入finally大括号里面。但是因为作用域的问题,try里面的对象不能作用于其他地方。所以比需在try之前初始化赋值null;同时还得进行非空判断。

FileInputStream

定义:

读取文件内容到程序

关于IO流的笔记_第3张图片 注意:

read() 返回值: 特殊值: -1 读到文件末尾

你可能感兴趣的:(java,开发语言)