Java IO 学习总结(一)输入流/输出流

前言:

学习IO流,记录并分享。文章如有错误,恳请指正。

Java IO流的类图:

Java IO 学习总结(一)输入流/输出流_第1张图片

1、什么是 Java IO 流?

数据传输是需要通道的,而IO流就是数据传输的通道。IO流可以形象比喻为运送货物的传输带。运送的货物就是数据,这里的数据有两种类型,要么是字节数据,要么是字符数据。字符的本质还是字节。

2、为什么要用 Java IO 流?

Java IO流提供了一种机制,用于在Java程序中读取和写入数据。根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。它允许您从文件、网络连接、内存等“源”读取数据,并将数据写入这些源。使用Java IO流,您可以以一种可靠的方式处理数据,而无需考虑数据源的类型或底层实现。因此,Java IO流是Java编程中不可或缺的一部分。

3、怎么用 Java IO 流?

/**
 * 这些示例演示了如何使用Java IO流读取和写入文件
 *
 * @param args
 */
public static void main(String[] args) {
    String readFilePath = "D:/test/testName.txt";
    String writerFilePath = "D:/test/success/writer.txt";
    reader(readFilePath);
    writer(writerFilePath);
}

/**
 * 读取文件中的内容并打印到控制台
 *
 * @param FilePath 要读取的文件路径与文件名
 */
private static void reader(String FilePath) {
    try {
        // 1. 创建一个输入流对象 打开数据源(如文件或网络连接)
        BufferedReader reader = new BufferedReader(new FileReader(FilePath));
        // 使用输入流对象读取数据
        String line = reader.readLine();
        while (line != null) {
            System.out.println(line);
            line = reader.readLine();
        }
        // 在完成读取或写入操作后,关闭数据源和输入流对象。
        reader.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

/**
 *
 * @param FilePath 要写入数据的文件路径与文件名
 */
private static void writer(String FilePath) {
    try {
        // 1.创建一个输出流对象 打开数据源(如文件或网络连接)
        BufferedWriter writer = new BufferedWriter(new FileWriter(FilePath));
        // 2.使用输出流对象写入数据
        writer.write("Hello World!");
        // 3.在完成读取或写入操作后,关闭数据源和输出流对象。
        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

4、什么是字节流,什么是字符流,他们的区别是什么?

前言:设备上的数据无论是图片或者视频,文字,它们都以二进制存储的。二进制的最终都是以一个8位为数据单元进行体现,所以计算机中的最小数据单元就是字节。
Java IO 学习总结(一)输入流/输出流_第2张图片

5、什么是输入流,什么是输出流?

Java IO 学习总结(一)输入流/输出流_第3张图片
说明:I/O流有很多种,按操作数据单位不同可分为字节流和字符流,按数据流的方向不同分为输入流和输出流,程序中需要根据待传输数据的不同特性而使用不同的流。
输入流只能进行读操作,当程序需要从某个数据源读入数据的时候,会开启一个输入流,数据源可以是文件、内存或网络等。
输出流只能进行写操作,当程序需要写入数据到数据源的时候,会开启一个输出流,数据源可以是文件、内存或网络等。

6、实战

将磁盘文件 A 的内容写入到 文件 B 中

public static void main(String[] args) throws IOException {
    TestCopyIO test = new TestCopyIO();
    String resourcesPath = "D:/test/gle.txt";
    String targetPath = "D:/test/gls.txt";
    String result = test.copy(resourcesPath, targetPath);
    System.out.println(result);
}

/**
 * 将磁盘文件 A 的内容写入到 文件 B 中
 *
 * @param resourcesPath 数据源文件
 * @param targetPath    目标文件
 * @return
 * @throws FileNotFoundException 输入流读入数据时找不到文件的时候会抛出这个异常
 * @throws IOException 可能会抛出的异常
 */
private String copy(String resourcesPath, String targetPath) throws FileNotFoundException, IOException {
    FileInputStream inputStream = null;
    FileOutputStream outputStream = null;
    try {
        // 1.创建一个输入流对象 打开数据源(如文件或网络连接)
        inputStream = new FileInputStream(resourcesPath);
        // 2.获取从此输入流读取的字节数的估计值
        int available = inputStream.available();
        // 3.创建存储读入的数据的容器
        byte[] resources = new byte[available];
        // 4.输入流对象读取数据 返回字节数据并放到 resources 中
        inputStream.read(resources);
        // 5.创建一个输出流对象 打开数据源(如文件或网络连接)
        outputStream = new FileOutputStream(targetPath);
        // 6.使用输出流对象读取或写入数据
        outputStream.write(resources);
        return new String(resources, StandardCharsets.UTF_8);
    } catch (FileNotFoundException e) {
        throw new RuntimeException(e);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }

}

Java IO 学习总结(二) 正在完善中,后续更新~


你可能感兴趣的:(Java,IO,java,学习)