Java文件流、序列化、本地化与日期处理
立即解锁
发布时间: 2025-08-17 02:35:36 阅读量: 13 订阅数: 46 AIGC 


Java编程基础与SCJP认证指南
# Java 文件流、序列化、本地化与日期处理
## 1. 文件与流操作
### 1.1 数据读取与输出示例
以下是一个简单的数据读取和输出示例代码:
```java
// Read data.
Student student = (Student) inputStream.readObject();
// Write data on standard output stream.
System.out.println("After reading: " + student);
// Close the stream.
inputStream.close();
```
### 1.2 复习问题解答
#### 1.2.1 Serializable 接口方法数量
问题:Serializable 接口中定义了多少个方法?
答案:(a) None
#### 1.2.2 ObjectOutputStream 写入的数据类型
问题:以下哪个选项最能描述 ObjectOutputStream 写入的数据?
答案:(c) Object hierarchies and Java primitive types
#### 1.2.3 程序运行结果判断
给出了多个程序代码示例,判断程序运行结果,例如:
```java
public class Person {
protected String name;
Person() { }
Person(String name) { this.name = name; }
}
import java.io.Serializable;
public class Student extends Person implements Serializable {
private long studNum;
Student(String name, long studNum) {
super(name);
this.studNum = studNum;
}
public String toString() { return "(" + name + ", " + studNum + ")"; }
}
import java.io.*;
public class RQ800_10 {
public static void main(String args[])
throws IOException, ClassNotFoundException {
FileOutputStream outputFile = new FileOutputStream("storage.dat");
ObjectOutputStream outputStream = new ObjectOutputStream(outputFile);
Student stud1 = new Student("Aesop", 100);
System.out.print(stud1);
outputStream.writeObject(stud1);
outputStream.flush();
outputStream.close();
FileInputStream inputFile = new FileInputStream("storage.dat");
ObjectInputStream inputStream = new ObjectInputStream(inputFile);
Student stud2 = (Student) inputStream.readObject();
System.out.println(stud2);
inputStream.close();
}
}
```
问题:该程序的运行结果是什么?
答案:(c) It prints (Aesop, 100)(Aesop, 100)
### 1.3 章节总结
- **文件类**:提供与主机文件系统的接口。
- **字节流**:由 InputStream 和 OutputStream 类表示。
- **文件流**:由 FileInputStream 和 FileOutputStream 类表示。
- **二进制文件读写**:使用 DataInputStream 和 DataOutputStream 类。
- **字符流**:由 Reader 和 Writer 类表示。
- **字符编码**:InputStreamReader 和 OutputStreamWriter 类使用 Unicode 和 UTF8 等编码。
- **文本文件读写**:涉及相关流的操作。
- **缓冲字符流**:由 BufferedReader 和 BufferedWriter 类表示。
- **标准输入、输出和错误流**:分别由 System.in、System.out 和 System.err 表示。
- **对象序列化**:实现对象的读写。
### 1.4 编程练习
编写一个程序,从源读取文本并使用一种编码,然后使用另一种编码将文本写入目标。程序有四个可选参数:
1. 第一个参数(可选):指定源的编码,默认编码为 "8859_1"。
2. 第二个参数(可选):指定目标的编码,默认编码为 "UTF8"。
3. 第三个参数(可选):指定源文件,若未提供则使用标准输入。
4. 第四个参数(可选):指定目标文件,若未提供则使用标准输出。
使用缓冲,每次读写 512 字节以提高效率,错误信息应写入标准错误流。
## 2. 本地化、模式匹配与格式化
### 2.1 java.util.Locale 类
#### 2.1.1 国际化与本地化概念
国际化是使程序具有全球意识,适应不同地区的差异,如日期、数字和货币的格式以及语言的不同。本地化是开发对特定地区敏感的程序。
#### 2.1.2 Locale 类的使用
Locale 类表示特定的地理、政治或文化区域,其重要属性是语言和国家。可以使用以下构造函数创建 Locale 对象:
```java
Locale(String language)
Locale(String language, String country)
```
其中,语言参数是 ISO - 639 - 1 语言代码(两个小写字母),国家参数是 ISO - 3166 国家代码(两个大写字母)。
#### 2.1.3 语言和国家代码示例
| 语言代码 | 语言 |
| ---- | ---- |
| "en" | English |
| "no" | Norwegian |
| "fr" | French |
| 国家代码 | 国家 |
| ---- | ---- |
| "US" | United States (US) |
| "GB" | Great Britain (GB) |
| "NO" | Norway |
| "FR" | France |
#### 2.1.4 预定义的 Locale
Locale 类有预定义的语言和国家组合的 Locale,例如:
| 常量 | 语言/国家 |
| ---- | ---- |
| Locale.ENGLISH | Locale with English (new Locale("en","")) |
| Locale.FRENCH | Locale with French (new Locale("fr","")) |
| Locale.GERMAN | Locale with German (new Locale("de","")) |
| Locale.US | Locale for US (new Locale("en","US")) |
| Locale.UK | Locale for United Kingdom/Great Britain (new Locale("en","GB")) |
| Locale.CANADA_FRENCH | Locale for Canada with French language (new Locale("fr","CA")) |
#### 2.1.5 操作默认 Locale
可以使用以下方法获取和设置默认 Locale:
```java
static Locale getDefault()
static void setDefault(Locale newLocale)
```
#### 2.1.6 获取显示名称
可以使用以下方法
0
0
复制全文
相关推荐









