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 loadExistingQuestions(String username) { Set 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; } }