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.
104 lines
3.2 KiB
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;
|
|
}
|
|
} |