Java之IO流


流的概念:

在程序的开发中IO的核心就是:输入和输出。

输入和输出是相对的,可能来自不同的环境。

对于服务器或者是客户端而言,传递的就是一种数据流的处理形式,而所谓的数据流指的就是字节数据。

这种的处理形式在java.io包里提供了两类支持:

  字节处理流:OutputStream(输出字节流)、InputStream(输入字节流)

  - 字符处理流:Writer(输出字符流)、Reader(输入字符流)

 

所有的流操作都应该统一步骤,以文件处理的流程为例:

  - 进行文件的读写操作,通过File类找到文件路径;

  - 通过字节流或字符流的子类为父类实例化;

  - 利用字节流或字符流中的方法实现数据的输入与输出;

  - 流的操作属于资源操作,而资源的操作必须进行关闭;

OutputStream抽象类:

NO 方法名称 类型 作用
1
public abstract void write(int b) throws IOException;
普通 输出单个字节数据
2
public void write(byte[ b) throws IOException; // 用得最多
普通 输出一组字节数据
3
public void write(byte[] b, int off, int len) throws IOException;
普通 输出部分数据

要想使用OutputStream抽象类,就需要使用它的子类去向上转型。

 关注的核心在子类FileOutputStream的构造方法上:

【覆盖】构造方法:public FileOutputStream(File file) throws FileNotFoundException;  // 每次执行程序新的内容都会覆盖旧的内容
OutputStream output = new FileOutputStream(file);
【追加】构造方法:public FileOutputStream(File file, boolean append) throws FileNotFoundException;  // 执行程序后在旧的内容后添加新的内容
OutputStream output = new FileOutputStream(file,true);

使用OutputStream类实现内容的输出:

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;

public class MAIN {
    public static void main(String[] args) throws Exception {
        File file = new File("D:" + File.separator + "Demo_2_15" + File.separator + "OutputStream.txt");    // 指定操作文件的路径
        if (!file.getParentFile().exists()){    // 如果文件父路径不存在
            file.getParentFile().mkdirs();  // 创建父路径
        }
        OutputStream output = new FileOutputStream(file);   // 子类实例化,覆盖类型的构造方法
        String str = "www.baidu.com";   // 输出的内容
        output.write(str.getBytes(StandardCharsets.UTF_8)); // 将字符串转换为字节数组
        output.close(); // 关闭资源
    }
}
import java.io.*;
import java.nio.charset.StandardCharsets;

public class MAIN {
    public static void main(String[] args) {
        File file = new File("D:" + File.separator + "Demo_2_15" + File.separator + "OutputStream.txt");    // 指定操作文件的路径
        if (!file.getParentFile().exists()){    // 如果文件父路径不存在
            file.getParentFile().mkdirs();  // 创建父路径
        }

        try (OutputStream output = new FileOutputStream(file,true)){   // 子类实例化,追加类型的构造方法
            String str = "www.baidu.com1";   // 输出的内容
            output.write(str.getBytes(StandardCharsets.UTF_8)); // 将字符串转换为字节数组
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

程序采用了标准的形式实现了输出的操作处理,并且在整体的处理之中,只是创建了文件的父目录,但是并没有创建文件,而在执行后发现文件自动完成了创建。

由于OutputStream的子类也属于AutoCloseable接口的子类,所以对于close()方法也可以简化使用。

import java.io.*;
import java.nio.charset.StandardCharsets;

public class MAIN {
    public static void main(String[] args) {
        File file = new File("D:" + File.separator + "Demo_2_15" + File.separator + "OutputStream.txt");    // 指定操作文件的路径
        if (!file.getParentFile().exists()){    // 如果文件父路径不存在
            file.getParentFile().mkdirs();  // 创建父路径
        }

        try (OutputStream output = new FileOutputStream(file)){   // 子类实例化
            String str = "www.baidu.com1";   // 输出的内容
            output.write(str.getBytes(StandardCharsets.UTF_8)); // 将字符串转换为字节数组
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}