Java IO
Java IO是Java用于处理数据输入和输出,它提供了用于读取和写入来自各种源,比如:文件、流和网络连接的数据的类和API。
Java IO 广泛用于Java应用程序中,比如:文件操作、数据输入/输出和网络通信等任务。
Java IO分类
Java IO可分为以下两个主要类别:字节流和字符流。
Java字节流
Java中的字节流(Byte Streams)用于处理二进制数据,以字节为单位进行读取和写入,核心类包括 InputStream 和 OutputStream。
如下图所示:
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。
如下图所示:
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(); } } }
这个示例展示了如何使用字符流来处理文本文件,包括逐行读取和逐行写入。
具体步骤如下:
- 指定源文件名和目标文件名。
- 创建
BufferedReader
来读取源文件中的内容。 - 创建
BufferedWriter
来写入目标文件。 - 使用
readLine()
方法逐行读取源文件中的文本。 - 使用
write()
方法将每一行文本写入目标文件,并使用newLine()
方法添加平台特定的换行符。 - 最后,关闭输入和输出流,以确保资源得到释放。
Java IO总结
总之,Java IO是处理各种输入和输出操作的全面库。
无论你是处理文件、流还是网络通信,Java都提供了各种类和包以满足您的需求。
NIO和NIO.2提高了I/O操作的性能和灵活性,而异步I/O提供了非阻塞操作的支持。
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

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