Java IO 流:简介与代码示例
在 Java 中,IO(Input/Output)流是处理输入和输出的核心工具。通过 IO 流,我们可以读取和写入各种数据类型,包括文本、图片、音频等等。在本文中,我们将简要介绍 Java IO 流的基础知识,并附上一些简单的代码示例。
Java IO 流概述
Java IO 流可以根据输入/输出设备的类型和特性,将数据的输入和输出操作简化。它提供了一种抽象的方式,让我们可以使用统一的方式处理不同的输入输出情况。
分类
Java IO 流主要分为两种类型:字节流和字符流。
- 字节流 :用于处理二进制数据,如文件上传/下载、图片加载等。主要的字节流类有
InputStream
和OutputStream
。 - 字符流 :用于处理文本数据,如文件读写、网络通信等。主要的字符流类有
Reader
和Writer
。
常用类与接口
下表列出了一些常用的 Java IO 流类和接口:
类/接口 | 描述 |
---|---|
FileInputStream /FileOutputStream |
以二进制形式读取/写入文件 |
FileReader /FileWriter |
以字符形式读取/写入文件 |
BufferedReader /BufferedWriter |
提供带缓冲的读取/写入操作,提高效率 |
InputStreamReader /OutputStreamWriter |
在字符流和字节流之间进行转换 |
PrintWriter |
提供打印文本的方法 |
Scanner |
用于读取输入,可以解析基本类型和字符串 |
代码示例
下面我们给出几个简单的 Java IO 流的代码示例。
1. 文件写入
java
import java.io.FileWriter;
import java.io.IOException;
public class FileWritingExample {
public static void main(String[] args) {
try {
FileWriter writer = new FileWriter("output.txt");
writer.write("Hello, this is a text file.");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这个示例中,我们使用 FileWriter
类将字符串写入到一个名为 "output.txt" 的文件中。
2. 文件读取并打印
java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileReadingExample {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个示例中,我们使用 BufferedReader
和 FileReader
类来读取名为 "input.txt" 的文件,并将文件的内容一行一行地打印到控制台。
3. 网络通信(字符流)
下面的示例是一个简单的客户端-服务器通信,通过 Socket 进行交互。注意,这需要将代码分割为两部分(Server 和 Client)来模拟客户端和服务器之间的网络通信。
首先是服务器端代码:
java
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(8000)) {
System.out.println("Server started.");
Socket socket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader consoleIn = new BufferedReader(new InputStreamReader(System.in));
String input;
while ((input = consoleIn.readLine()) != null) {
out.println(input);
System.out.println("echo: " + input);
}
} catch (IOException e) {
System.out.println("Exception caught when trying to listen on port " + "8000" + " or listening for a connection");
System.out.println(e.getMessage());
}
}
接着是客户端的代码:
java
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try (Socket echoSocket = new Socket("localhost", 8000);
PrintWriter out = new PrintWriter(echoSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));) {
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("echo: " + in.readLine());
}
} catch (UnknownHostException e) {
System.err.println("Don't know about host: localhost.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to: localhost.");
System.exit(1);
}
}
}
这个例子是一个简单的回显服务器,客户端发送消息到服务器,服务器会将接收到的消息回传给客户端,并在控制台显示原消息和回传的消息。
总结
Java 的 IO 流提供了处理各种数据输入和输出的强大工具。无论是处理文件,还是处理网络通信,Java IO 流都能提供简单且高效的方式。在理解和使用这些工具时,要记住及时关闭打开的资源,以防止资源泄露。