You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.5 KiB
80 lines
2.5 KiB
import java.io.BufferedReader;
|
|
import java.io.BufferedWriter;
|
|
import java.io.File;
|
|
import java.io.FileReader;
|
|
import java.io.FileWriter;
|
|
import java.io.IOException;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.nio.file.Paths;
|
|
import java.time.LocalDateTime;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.util.HashSet;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
|
|
/**
|
|
* 文件服务的文本文件实现。
|
|
* 负责将题目数据以文本格式读写到本地文件系统。
|
|
*/
|
|
public class FileService implements IFileService {
|
|
|
|
private static final DateTimeFormatter FILE_NAME_FORMATTER =
|
|
DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss");
|
|
|
|
@Override
|
|
public void saveProblems(User user, List<Equation> problems) throws IOException {
|
|
Path userDirectory = Paths.get(user.getStoragePath());
|
|
// 确保用户的专属目录存在
|
|
if (!Files.exists(userDirectory)) {
|
|
Files.createDirectories(userDirectory);
|
|
}
|
|
|
|
String timestamp = LocalDateTime.now().format(FILE_NAME_FORMATTER);
|
|
String fileName = timestamp + ".txt";
|
|
Path filePath = userDirectory.resolve(fileName);
|
|
|
|
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath.toFile()))) {
|
|
for (int i = 0; i < problems.size(); i++) {
|
|
String problemLine = (i + 1) + ". " + problems.get(i).toString();
|
|
writer.write(problemLine);
|
|
writer.newLine();
|
|
// 满足题目之间空一行的格式要求
|
|
if (i < problems.size() - 1) {
|
|
writer.newLine();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Set<String> loadAllProblemHistory(User user) throws IOException {
|
|
Set<String> historySet = new HashSet<>();
|
|
Path userDirectoryPath = Paths.get(user.getStoragePath());
|
|
File userDirectory = userDirectoryPath.toFile();
|
|
|
|
if (!userDirectory.exists() || !userDirectory.isDirectory()) {
|
|
return historySet; // 如果目录不存在,直接返回空集合
|
|
}
|
|
|
|
File[] files = userDirectory.listFiles((dir, name) -> name.toLowerCase().endsWith(".txt"));
|
|
if (files == null) {
|
|
return historySet;
|
|
}
|
|
|
|
for (File file : files) {
|
|
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
|
|
String line;
|
|
while ((line = reader.readLine()) != null) {
|
|
if (!line.trim().isEmpty()) {
|
|
String cleanedLine = line.replaceFirst("^\\d+\\.\\s*", "");
|
|
historySet.add(cleanedLine);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return historySet;
|
|
}
|
|
|
|
} |