Java IO最全详解(作用分类及使用示例)

Java IO

Java IO是Java用于处理数据输入和输出,它提供了用于读取和写入来自各种源,比如:文件、流和网络连接的数据的类和API。

Java IO 广泛用于Java应用程序中,比如:文件操作、数据输入/输出和网络通信等任务。

 

Java IO分类

Java IO可分为以下两个主要类别:字节流和字符流。

Java IO最全详解(作用分类及使用示例)-mikechen

Java字节流

Java中的字节流(Byte Streams)用于处理二进制数据,以字节为单位进行读取和写入,核心类包括 InputStream 和 OutputStream。

如下图所示:

Java IO最全详解(作用分类及使用示例)-mikechen

1)InputStream(字节输入流)

InputStream 是所有字节输入流的抽象基类,它定义了一组用于读取字节数据的方法。

以下是一些常见的 InputStream 子类:

  • FileInputStream:用于从文件中读取字节数据。
  • ByteArrayInputStream:用于从内存中的字节数组读取数据。
  • DataInputStream:用于读取基本数据类型(如整数、浮点数)。
  • BufferedInputStream:提供了缓冲功能,以提高读取性能。

2)OutputStream(字节输出流)

OutputStream 是所有字节输出流的抽象基类,它定义了一组用于写入字节数据的方法。

以下是一些常见的 OutputStream 子类:

  • FileOutputStream:用于将字节数据写入文件。
  • ByteArrayOutputStream:用于将字节数据写入内存中的字节数组。
  • DataOutputStream:用于写入基本数据类型。
  • BufferedOutputStream:提供了缓冲功能,以提高写入性能。

使用字节流从文件中读取和写入数据的示例:

try (FileInputStream input = new FileInputStream("input.txt");
     FileOutputStream output = new FileOutputStream("output.txt")) {
    int data;
    while ((data = input.read()) != -1) {
        output.write(data);
    }
} catch (IOException e) {
    e.printStackTrace();
}

 

Java字符流

Java字符流(Character Streams)用于处理文本数据,以字符为单位进行读取和写入,核心类包括 Reader 和 Writer。

如下图所示:

Java IO最全详解(作用分类及使用示例)-mikechen

1)Reader(字符输入流)

Reader 是所有字符输入流的抽象基类,定义了用于读取字符数据的方法。

以下是一些常见的 Reader 子类:

  • FileReader:用于从文件中读取字符数据。
  • BufferedReader:提供了缓冲功能,以提高读取性能和提供逐行读取的能力。
  • StringReader:用于从字符串中读取字符数据。

2)Writer(字符输出流)

Writer 是所有字符输出流的抽象基类,定义了用于写入字符数据的方法。

以下是一些常见的 Writer 子类:

  • FileWriter:用于将字符数据写入文件。
  • BufferedWriter:提供了缓冲功能,以提高写入性能和提供逐行写入的能力。
  • StringWriter:用于将字符数据写入字符串。

使用字符流从文本文件中读取和写入数据的示例:

try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
     BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
    String line;
    while ((line = reader.readLine()) != null) {
        writer.write(line);
        writer.newLine();  // 写入平台特定的换行字符
    }
} catch (IOException e) {
    e.printStackTrace();
}

 

Java IO使用

以下是一个简单的Java IO使用示例,演示了如何使用Java字符流来从文本文件中读取数据并写入新文件。

如下所示:

import java.io.*;

public class FileCopyExample {
    public static void main(String[] args) {
        String sourceFileName = "source.txt";
        String destinationFileName = "destination.txt";

        try (BufferedReader reader = new BufferedReader(new FileReader(sourceFileName));
             BufferedWriter writer = new BufferedWriter(new FileWriter(destinationFileName))) {

            String line;
            while ((line = reader.readLine()) != null) {
                // 读取一行文本
                writer.write(line); // 将行写入目标文件
                writer.newLine(); // 写入平台特定的换行符
            }

            System.out.println("File copy successful!");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这个示例展示了如何使用字符流来处理文本文件,包括逐行读取和逐行写入。

具体步骤如下:

  1. 指定源文件名和目标文件名。
  2. 创建 BufferedReader 来读取源文件中的内容。
  3. 创建 BufferedWriter 来写入目标文件。
  4. 使用 readLine() 方法逐行读取源文件中的文本。
  5. 使用 write() 方法将每一行文本写入目标文件,并使用 newLine() 方法添加平台特定的换行符。
  6. 最后,关闭输入和输出流,以确保资源得到释放。

 

Java IO总结

总之,Java IO是处理各种输入和输出操作的全面库。

无论你是处理文件、流还是网络通信,Java都提供了各种类和包以满足您的需求。

NIO和NIO.2提高了I/O操作的性能和灵活性,而异步I/O提供了非阻塞操作的支持。

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复架构即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法