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.
math-test/src/FileManager.java

104 lines
3.2 KiB

package src;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
public class FileManager {
private String baseDir;
public FileManager() {
this.baseDir = System.getProperty("user.dir") + File.separator + "papers";
createBaseDirectory();
}
// 创建基础目录
private void createBaseDirectory() {
File dir = new File(baseDir);
if (!dir.exists()) {
dir.mkdirs();
}
}
// 为用户创建目录
private String createUserDirectory(String username) {
String userDir = baseDir + File.separator + username;
File dir = new File(userDir);
if (!dir.exists()) {
dir.mkdirs();
}
return userDir;
}
// 生成文件名
private String generateFileName() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
return sdf.format(new Date()) + ".txt";
}
// 保存题目到文件
public void saveQuestions(String username, String[] questions) throws IOException {
String userDir = createUserDirectory(username);
String fileName = generateFileName();
String filePath = userDir + File.separator + fileName;
try (PrintWriter writer = new PrintWriter(new FileWriter(filePath))) {
for (int i = 0; i < questions.length; i++) {
writer.println((i + 1) + ". " + questions[i]);
if (i < questions.length - 1) {
writer.println(); // 题目之间空一行
}
}
}
System.out.println("题目已保存到: " + filePath);
}
// 检查题目是否重复(读取用户目录下所有文件)
public Set<String> loadExistingQuestions(String username) {
Set<String> existingQuestions = new HashSet<>();
String userDir = baseDir + File.separator + username;
File dir = new File(userDir);
if (dir.exists() && dir.isDirectory()) {
File[] files = dir.listFiles((d, name) -> name.endsWith(".txt"));
if (files != null) {
for (File file : files) {
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
StringBuilder questionBuilder = new StringBuilder();
while ((line = reader.readLine()) != null) {
if (line.trim().isEmpty()) {
if (!questionBuilder.isEmpty()) {
// 移除题号
String question = questionBuilder.toString().replaceAll("^\\d+\\.\\s*", "");
existingQuestions.add(question.trim());
questionBuilder.setLength(0);
}
} else {
questionBuilder.append(line).append(" ");
}
}
// 处理最后一个题目
if (!questionBuilder.isEmpty()) {
String question = questionBuilder.toString().replaceAll("^\\d+\\.\\s*", "");
existingQuestions.add(question.trim());
}
} catch (IOException e) {
System.out.println("读取文件失败: " + file.getName());
}
}
}
}
return existingQuestions;
}
}