Java中的IO详解
Java的IO(输入/输出)系统是一个复杂且功能丰富的库,它提供了多种方式来处理数据流。
概念
- 流 (Stream): 流是用于表示一系列有序的数据元素的抽象。在Java中,所有的I/O操作都是通过流完成的。
- 字节流 (Byte Stream): 以字节为单位进行读写,适用于二进制数据。
- 字符流 (Character Stream): 以字符为单位进行读写,适用于文本数据,通常处理Unicode字符。
- 缓冲 (Buffering): 使用缓冲区可以减少磁盘或网络I/O次数,提高性能。
- 非阻塞 I/O (Non-blocking I/O): 在NIO中引入,允许程序在等待I/O操作时继续执行其他任务。
- 通道 (Channel): NIO中的核心组件之一,用于直接与文件或网络套接字进行高效的数据传输。
- 选择器 (Selector): NIO中的多路复用器,用于监控多个通道的I/O事件。
类的概述
字节流
InputStream
和OutputStream
: 抽象基类,定义了所有字节流的基本方法。FileInputStream
和FileOutputStream
: 用于读写文件的字节流。ByteArrayInputStream
和ByteArrayOutputStream
: 从或向字节数组读写字节。BufferedInputStream
和BufferedOutputStream
: 带有缓冲功能的字节流。DataInputStream
和DataOutputStream
: 支持基本数据类型读写的字节流。ObjectInputStream
和ObjectOutputStream
: 用于序列化和反序列化对象。
字符流
Reader
和Writer
: 抽象基类,定义了所有字符流的基本方法。FileReader
和FileWriter
: 用于读写文件的字符流。CharArrayReader
和CharArrayWriter
: 从或向字符数组读写字符。BufferedReader
和BufferedWriter
: 带有缓冲功能的字符流,支持按行读写。InputStreamReader
和OutputStreamWriter
: 作为字节流和字符流之间的桥梁,进行编码转换。PrintWriter
: 提供格式化输出的方法,如printf
。
NIO
FileChannel
: 文件的通道实现,支持直接内存访问。SocketChannel
,ServerSocketChannel
,DatagramChannel
: 网络通信的通道实现。ByteBuffer
: 用于存储和操作字节数据的缓冲区。Selector
: 用于管理多个通道的I/O事件。
NIO.2
Path
和Paths
: 表示文件路径,并提供各种路径操作方法。Files
: 包含大量静态方法,用于执行常见的文件操作。WatchService
: 用于监视文件系统的更改。
使用场景
- 文件操作:
- 读取和写入文本或二进制文件。
- 复制文件或目录。
- 遍历目录树。
- 网络编程:
- 创建客户端或服务器端应用程序。
- 实现高并发的网络服务。
- 序列化:
- 将对象保存到文件或在网络上传输。
- 从文件或网络加载对象。
- 日志记录:
- 写入日志信息到文件。
- 读取日志文件进行分析。
常见使用示例
1. 读取文本文件
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadTextFile {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. 写入文本文件
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class WriteTextFile {
public static void main(String[] args) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
bw.write("Hello, World!");
bw.newLine();
bw.write("This is a test.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
3. 使用NIO复制文件
import java.nio.file.*;
import java.io.IOException;
public class CopyFileNIO {
public static void main(String[] args) {
Path source = Paths.get("source.txt");
Path target = Paths.get("target.txt");
try {
Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
e.printStackTrace();
}
}
}
4. 使用NIO.2遍历目录
import java.nio.file.*;
import java.io.IOException;
public class TraverseDirectory {
public static void main(String[] args) {
Path dir = Paths.get(".");
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
for (Path entry : stream) {
System.out.println(entry.getFileName());
}
} catch (IOException | DirectoryIteratorException x) {
System.err.println(x);
}
}
}
这些例子展示了如何使用Java IO库的不同部分来完成实际的任务。根据您的具体需求,您可以选择最适合的类和方法来构建您的应用。
标签:Java,字节,io,java,详解,IOException,IO,import,public From: https://blog.csdn.net/qq_44734705/article/details/144903846