1.设计文件工具类: (1).完成拷贝任意类型的文件。 (2).完成目录拷贝,包括子目录及各个文件。 2.设计程序完成: (1)消息类,包括发送人,接受人,发消息的时间、消息内容等。 (2)把若干个消息对象存到文件中。 (3)从文件中读入若干消息对象,并输出到控制台。
时间: 2024-10-01 17:10:39 浏览: 23
FileUploadUtil.java(文件上传工具类)
设计这样的文件工具类和消息处理程序可以分为两部分:
1. **文件工具类**:
- **FileUtils.java**
a. **copyFile**方法: 这是一个泛型方法,接收一个源文件路径和目标文件路径作为参数,使用java.io包中的`Files.copy()`或`FileInputStream`和`FileOutputStream`来实现文件的复制,无论源文件是文本还是二进制数据。
```java
public static <T extends File> void copyFile(T source, T destination) {
try (InputStream in = Files.newInputStream(source.toPath());
OutputStream out = Files.newOutputStream(destination.toPath())) {
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
throw new RuntimeException("Failed to copy file", e);
}
}
```
b. **copyDirectory**方法: 使用递归,遍历源目录下的所有文件和子目录,并调用`copyFile`方法进行复制。
```java
public static void copyDirectory(File srcDir, File destDir) {
if (!srcDir.exists() || !srcDir.isDirectory()) {
return;
}
for (File child : srcDir.listFiles()) {
copyFile(child, new File(destDir, child.getName()));
}
}
```
2. **消息处理程序**:
- **Message.java**
a. 定义一个包含发送者、接收者、时间戳和消息内容的简单消息类。
```java
public class Message {
private String sender;
private String receiver;
private LocalDateTime timestamp;
private String content;
// 构造函数、getter和setter...
}
```
- **MessageSerializer.java**
提供序列化和反序列化功能,将消息对象转换为文件和从文件恢复。
```java
public class MessageSerializer {
public void saveMessages(List<Message> messages, File outputFile) {
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(outputFile))) {
oos.writeObject(messages);
} catch (IOException e) {
throw new RuntimeException("Failed to save messages", e);
}
}
public List<Message> readMessages(File inputFile) {
List<Message> messages = new ArrayList<>();
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(inputFile))) {
messages.addAll((List<Message>)ois.readObject());
} catch (IOException | ClassNotFoundException e) {
throw new RuntimeException("Failed to read messages", e);
}
return messages;
}
}
```
阅读全文