Java文件与字符流操作全解析
立即解锁
发布时间: 2025-08-17 02:35:35 阅读量: 14 订阅数: 22 


Java编程基础与SCJP认证指南
### Java文件与字符流操作全解析
#### 1. 问题引入
假设当前目录下存在文件 "info.dat",其字节值依次为 10、20 和 30。有一个关于该文件操作的程序,以下是对该程序的几种描述,需要选择正确的一项:
- (a) 程序将无法编译,因为有一个未检查的异常未被捕获。
- (b) 程序将编译并打印 10|20|30|Input error。
- (c) 程序将编译并打印 10|20|30|End of stream。
- (d) 程序将编译并打印 10|20|30|,然后阻塞以从文件中读取。
- (e) 程序将编译并打印 10|20|30|,并因未捕获的异常而终止。
#### 2. 字符编码与字符流概述
字符编码是表示字符的方案。Java 程序内部使用 16 位 Unicode 字符编码表示 char 类型的值,但主机平台可能使用其他字符编码来外部表示和存储字符。例如,ASCII 字符编码在许多平台上广泛用于表示字符,但它只是 Unicode 标准的一个小子集。
抽象类 Reader 和 Writer 是使用特定字符编码读写 Unicode 字符的流继承层次结构的根。Reader 是读取 Unicode 字符序列的输入字符流,Writer 是写入 Unicode 字符序列的输出字符流。字符编码用于在外部编码和内部 Unicode 字符之间进行转换。
以下是 java.io 包中一些选定字符流的概述:
| 类型 | 描述 |
| ---- | ---- |
| BufferedReader | 从底层读取器读取字符并进行缓冲。必须指定底层读取器,还可以指定可选的缓冲区大小。 |
| InputStreamReader | 从指定的字节输入流读取字符。如果未明确指定字符编码,则使用默认字符编码。 |
| FileReader | 使用默认字符编码从文件读取字符。文件可以通过 File 对象、FileDescriptor 或字符串文件名指定。它会自动创建与文件关联的 FileInputStream。 |
#### 3. 读取器方法
读取器使用以下方法读取 Unicode 字符:
- `int read() throws IOException`:读取一个字符,返回值为 0 到 65535(0x0000 - 0xFFFF)范围内的 int。如果到达流的末尾,则返回 -1。
- `int read(char cbuf[]) throws IOException`:将字符读入字符数组。
- `int read(char cbuf[], int off, int len) throws IOException`:将字符读入字符数组的指定偏移量和长度位置。
- `long skip(long n) throws IOException`:跳过指定数量的字符。
#### 4. 写入器方法
写入器使用以下方法写入 Unicode 字符:
- `void write(int c) throws IOException`:接受一个 int 作为参数,但只写入最低有效 16 位。
- `void write(char[] cbuf) throws IOException`:写入字符数组。
- `void write(String str) throws IOException`:写入字符串。
- `void write(char[] cbuf, int off, int length) throws IOException`:写入字符数组的指定部分。
- `void write(String str, int off, int length) throws IOException`:写入字符串的指定部分。
- `void close() throws IOException`:关闭流,释放系统资源。关闭字符输出流会自动刷新流。
- `void flush() throws IOException`:手动刷新字符输出流。
#### 5. 打印写入器
OutputStreamWriter 和 InputStreamReader 类的功能有限,主要用于读写字符。为了写入 Java 原始值和对象的文本表示,应使用 PrintWriter。PrintWriter 可以通过以下构造函数与写入器、字节输出流、File 或字符串文件名进行链式连接:
- `PrintWriter(Writer out)`
- `PrintWriter(Writer out, boolean autoFlush)`
- `PrintWriter(OutputStream out)`
- `PrintWriter(OutputStream out, boolean autoFlush)`
- `PrintWriter(File file)`
- `PrintWriter(File file, String charsetName)`
- `PrintWriter(String fileName)`
- `PrintWriter(String fileName, String charsetName)`
autoFlush 参数指定在调用 PrintWriter 类的任何 println() 方法时是否应刷新 PrintWriter。
以下是 PrintWriter 类的打印方法:
| print() 方法 | println() 方法 |
| ---- | ---- |
| `print(boolean b)` | `println(boolean b)` |
| `print(char c)` | `println(char c)` |
| `print(int i)` | `println(int i)` |
| `print(long l)` | `println(long l)` |
| `print(float f)` | `println(float f)` |
| `print(double d)` | `println(double d)` |
| `print(char[] s)` | `println(char[] ca)` |
| `print(String s)` | `println(String str)` |
| `print(Object obj)` | `println(Object obj)` |
#### 6. 写入文本文件
当使用默认字符编码向文件写入文本时,可以使用以下四种设置 PrintWriter 的方法:
- **基于 OutputStreamWriter 链式连接 FileOutputStream**:
```java
FileOutputStream outputFile = new FileOutputStream("info.txt");
OutputStreamWriter outputStream = new OutputStreamWriter(outputFile);
PrintWriter printWriter1 = new PrintWriter(outputStream, true);
```
- **基于 FileOutputStream**:
```java
FileOutputStream outputFile = new F
```
0
0
复制全文
相关推荐









