Java I/O(输入/输出)是处理输入和输出的机制,用于读取和写入数据。Java 提供了丰富的 I/O 类库,支持文件操作、网络通信、对象序列化等。
1. 流(Streams)
Java I/O 主要通过流的概念进行操作。流是一个数据序列,从源传输到目的地。根据操作方向和数据类型的不同,流可以分为输入流(InputStream)、输出流(OutputStream)、读取器(Reader)和写入器(Writer)等。
1.1 输入流和输出流
- 输入流(InputStream): 用于从源读取数据。
- 输出流(OutputStream): 用于向目的地写入数据。
// 示例:使用 FileInputStream 读取文件内容并输出
try (InputStream input = new FileInputStream("example.txt")) {
int data;
while ((data = input.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
// 示例:使用 FileOutputStream 写入文件内容
try (OutputStream output = new FileOutputStream("output.txt")) {
String data = "Hello, Java I/O!";
output.write(data.getBytes());
} catch (IOException e) {
e.printStackTrace();
1.2 读取器和写入器
- 读取器(Reader): 用于读取字符数据。
- 写入器(Writer): 用于写入字符数据。
// 示例:使用 FileReader 读取文件内容并输出
try (Reader reader = new FileReader("example.txt")) {
int data;
while ((data = reader.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
// 示例:使用 FileWriter 写入文件内容
try (Writer writer = new FileWriter("output.txt")) {
String data = "Hello, Java I/O!";
writer.write(data);
} catch (IOException e) {
e.printStackTrace();
}
2. 文件操作
Java 提供了一系列用于文件操作的类,包括 File
、FileInputStream
、FileOutputStream
、FileReader
、FileWriter
等。
File file = new File("example.txt");
if (file.exists()) {
System.out.println("File exists: " + file.getName());
} else {
System.out.println("File not found");
}
// 创建文件夹
File directory = new File("newDirectory");
directory.mkdir();
3. 缓冲流(Buffered Streams)
缓冲流提供了缓冲区,可以提高读写效率。常见的缓冲流包括 BufferedInputStream
、BufferedOutputStream
、BufferedReader
、BufferedWriter
。
try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
String data = "Hello, Java I/O!";
writer.write(data);
} catch (IOException e) {
e.printStackTrace();
}
4. 对象序列化(Object Serialization)
对象序列化用于将对象转换为字节流,以便于在网络上传输或保存到文件中。主要使用 ObjectInputStream
和 ObjectOutputStream
。
// 序列化对象
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.ser"))) {
MyClass myObject = new MyClass();
oos.writeObject(myObject);
} catch (IOException e) {
e.printStackTrace();
}
// 反序列化对象
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.ser"))) {
MyClass myObject = (MyClass) ois.readObject();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
以上是 Java I/O 的一些基本概念和实例。Java I/O 提供了丰富的工具和类库,能够满足不同场景下的输入输出需求。