Java I/O(输入/输出)是指Java编程语言处理数据输入和输出的功能。Java I/O主要包含在 java.io
包中,提供了一组丰富的类和接口,用于读取和写入文件、数据流和控制台。
Java I/O 的关键组件:
-
流:
- 字节流 :处理原始二进制数据。关键类包括:
InputStream
:所有字节输入流的抽象类。OutputStream
:所有字节输出流的抽象类。- 常用子类:
FileInputStream
、FileOutputStream
、BufferedInputStream
、BufferedOutputStream
。
- 字符流 :处理字符数据(文本)。关键类包括:
Reader
:所有字符输入流的抽象类。Writer
:所有字符输出流的抽象类。- 常用子类:
FileReader
、FileWriter
、BufferedReader
、BufferedWriter
。
- 字节流 :处理原始二进制数据。关键类包括:
-
文件处理:
File
类用于以抽象方式表示文件和目录路径名。它还提供了创建、删除和操作文件和目录的方法。
-
序列化:
- Java 提供了一种机制,可以将对象转换为字节流(序列化),并将其恢复为对象(反序列化)。这可以通过
ObjectInputStream
和ObjectOutputStream
来实现。
- Java 提供了一种机制,可以将对象转换为字节流(序列化),并将其恢复为对象(反序列化)。这可以通过
基本使用示例:
以下是一个简单示例,演示如何使用 Java I/O 来读取和写入文件:
- 创建写入流 :使用
BufferedWriter
和FileWriter
创建一个输出流,将数据写入outputFilePath
指定的文件。BufferedWriter
提供了缓冲功能,提高写入效率。 - try-with-resources :这种语法确保在
try
块结束时自动关闭资源,避免内存泄漏。 - 创建读取流 :类似于写入流,使用
BufferedReader
和FileReader
创建一个输入流,从inputFilePath
指定的文件读取数据。 - 循环读取 :定义一个字符串变量
line
,使用readLine()
方法逐行读取文件内容。直到文件结束(readLine()
返回null
)。
java
import java.io.*;
public class JavaIOExample {
public static void main(String[] args) {
String inputFilePath = "input.txt";
String outputFilePath = "output.txt";
// 写入文件
try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputFilePath))) {
writer.write("Hello, World!");
} catch (IOException e) {
e.printStackTrace();
}
// 读取文件
try (BufferedReader reader = new BufferedReader(new FileReader(inputFilePath))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 输入输出流程:这段代码展示了如何使用 Java I/O 来写入和读取文件。首先,它写入一个字符串到指定文件,然后读取另外一个文件的内容并输出到控制台。
- 资源管理:通过 try-with-resources 语法,实现了自动关闭流的功能,避免了手动关闭流可能造成的错误。
- 异常处理:通过捕获异常,确保程序运行的鲁棒性。
重要事项:
- 始终关闭流以释放系统资源。这可以通过使用"资源自动关闭"语句实现,如示例所示。
- 注意异常,尤其是
IOException
,它可能在文件操作期间发生。